1

我想检查是否有任何当前登录的用户角色在特定的角色列表中。但它可以是任意两个集合。

基本上我想检查 [x1,x3,x4] 集合的任何成员是否包含在 [x2,x3,x7] 中

如何在 Groovy (Grails) 中做到这一点?

4

4 回答 4

4

您可以使用以下Collection#disjoint方法:

def a = [5, 4, 3]
def b = [7, 6, 5]

// a contains a member of b if they are not disjoint.
assert !a.disjoint(b)
assert a.disjoint([8, 7, 6])

其他替代方案是!a.intersect(b).emptyora.any { it in b }但我认为disjoint解决方案是最直接的解决方案,并且(此处疯狂猜测)可能是性能最高的解决方案,因为它不需要中间集合或闭包(更新:好吧,代码disjoint显示它确实有些时髦引擎盖下的东西......但几乎所有的 Groovy 方法都这样做 =P)。

于 2012-06-27T13:16:00.683 回答
1

将列表中的一个转换为集合并使用retainAll方法查找交集。

def s1 = [x1,x3,x4] as Set
s1.retainAll([x2,x3,xy]).size() > 0
于 2012-06-27T13:02:21.547 回答
0
boolean check(Collection c1, Collection c2) {
    for(def i in c1) {
        if(c2.contains(i)) {
            return true
            break
        }
    }
    return false
}
于 2012-06-27T13:12:02.503 回答
0
def a = [1,2,3] 
    def b = [3,4,5]
    def result = false 
    a.each{it->
         if(b.contains(it))
         result =true
    }
    return result
于 2014-08-22T06:19:42.957 回答