我有两套Strings类型的列表
def allExecPerms // has 500 elements nearly
def dbExecPerms // has 550 elements nearly
list allExecPerms是dbExecPerms的子集我试图获取不匹配的元素子集而不迭代dbExecPerms并且comapring每个元素都在allExecPerms中。
def unmatchedExecs = []
dbExecPerms.each {
if(!allExecPermissions.contains(it))
unmatchedExecs.add(it)
}
我想知道以更简单的方式使用groovy闭包是否可行?
答案 0 :(得分:1)
Groovy可以通过以下方式为您完成此任务:
(dbExecPaams as Set) - allExecParams
The minus operator is overloaded on Set实现集差操作:
public Set minus(Collection removeMe)
Create a Set composed of the elements of the first Set minus the elements of the given Collection.
参数: removeMe - 要从Set中删除的项目。
返回: 结果集
自: 1.5.0
答案 1 :(得分:1)
我意识到这已经得到了解答,但Groovy的findAll
方法旨在根据以下条件收集列表中的元素:
def unmatchedExecs = dbExecPerms.findAll {
!allExecPermissions.contains(it)
}
文档:http://groovy.codehaus.org/groovy-jdk/java/util/Collection.html#findAll(groovy.lang.Closure)