如何在Groovy中获得不匹配的List子集

时间:2014-06-18 01:17:52

标签: collections groovy

我有两套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闭包是否可行?

2 个答案:

答案 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)