JMeter中如何筛选数组中不包含指定列表元素的值?
如何筛选出响应数组中不包含指定字符串数组元素的项?
我需要从响应数组fetchedStudyName中筛选出不包含输入数组excludeStudyName内任意字符串的元素,输入数组的值为["Inflammation","Perf","Test_Study"]。
目前已有Groovy代码可以成功筛选出包含指定元素的结果(共48个),代码如下:
import groovy.json.JsonSlurper; def fetchedStudyName = [] 1.upto(vars.get('studyNameFetched_matchNr') as int, { index -> fetchedStudyName.add(vars.get('studyNameFetched_' + index)) }); String tempExcludeStudyName = vars.get('excludeStudyName'); def excludeStudyName = new JsonSlurper().parseText(tempExcludeStudyName); def valid = fetchedStudyName.findAll { a -> excludeStudyName.any {a.contains(it)} }
但当我尝试修改条件为excludeStudyName.any {!a.contains(it)}或excludeStudyName.any {!(a.contains(it))}时,结果返回了响应数组的所有元素,不知道该怎么修正。
解决方案
你之前的写法错误在于误用了any方法:any只要检测到排除数组中有一个字符串不被当前元素包含,就会返回true,这意味着几乎所有元素都会被保留(除非某个元素包含了排除数组里的所有字符串)。
正确的逻辑应该是:当前元素不包含排除数组中的任何一个字符串,也就是需要用every方法来检查排除数组的所有元素,确保每一个都不被当前元素包含。
修正后的代码如下:
import groovy.json.JsonSlurper; def fetchedStudyName = [] 1.upto(vars.get('studyNameFetched_matchNr') as int, { index -> fetchedStudyName.add(vars.get('studyNameFetched_' + index)) }); String tempExcludeStudyName = vars.get('excludeStudyName'); def excludeStudyName = new JsonSlurper().parseText(tempExcludeStudyName); // 筛选逻辑:当前元素不包含排除数组中的所有字符串 def valid = fetchedStudyName.findAll { a -> excludeStudyName.every { !a.contains(it) } }
every方法会遍历排除数组的每一个元素,只有当所有元素都满足!a.contains(it)(即当前元素不包含该字符串)时,才会将这个元素加入结果集合,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Jyoti Prakash Mallick
相关产品推荐
相关产品推荐

