我想检查是否有任何当前登录的用户角色在特定的角色列表中。但它可以是任意两个集合。
基本上我想检查 [x1,x3,x4] 集合的任何成员是否包含在 [x2,x3,x7] 中
如何在 Groovy (Grails) 中做到这一点?
我想检查是否有任何当前登录的用户角色在特定的角色列表中。但它可以是任意两个集合。
基本上我想检查 [x1,x3,x4] 集合的任何成员是否包含在 [x2,x3,x7] 中
如何在 Groovy (Grails) 中做到这一点?
您可以使用以下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).empty
ora.any { it in b }
但我认为disjoint
解决方案是最直接的解决方案,并且(此处疯狂猜测)可能是性能最高的解决方案,因为它不需要中间集合或闭包(更新:好吧,代码disjoint
显示它确实有些时髦引擎盖下的东西......但几乎所有的 Groovy 方法都这样做 =P)。
将列表中的一个转换为集合并使用retainAll方法查找交集。
def s1 = [x1,x3,x4] as Set
s1.retainAll([x2,x3,xy]).size() > 0
boolean check(Collection c1, Collection c2) {
for(def i in c1) {
if(c2.contains(i)) {
return true
break
}
}
return false
}
def a = [1,2,3]
def b = [3,4,5]
def result = false
a.each{it->
if(b.contains(it))
result =true
}
return result