与groovy集合中的交叉相反的是什么?
答案 0 :(得分:26)
您可能想要结合@Andre和@denis
的答案我认为你想要的是联合,然后从这个
中减去交集def a = [1,2,3,4,5]
def b = [2,3,4]
assert [1,5] == ( a + b ) - a.intersect( b )
丹尼斯给出的解决方案取决于你是否
def opposite = leftCollection-rightCollection // [1,5]
或
def opposite = rightCollection-leftCollection // []
我不认为你想要
答案 1 :(得分:6)
我不确定你所说的“与工会相对”是什么意思,但我的猜测是你的意思是对称差异(AKA集差异或分离)。此操作的结果在下面以红色显示。
在两个Java / Groovy集合上执行此操作的最简单方法是使用Apache commons集合提供的disjunction方法。
答案 2 :(得分:4)
可能是这个吗?
def leftCollection = [1,2,3,4,5]
def rightCollection = [2,3,4]
def opposite = leftCollection-rightCollection
println opposite
打印
[1,5]
答案 3 :(得分:3)
使用交叉点交叉
assert [4,5] == [1,2,3,4,5].intersect([4,5,6,7,8])
使用+代表工会:
assert [1,2,3,4,5] == [1,2,3] + [4,5]
请参阅http://groovy.codehaus.org/groovy-jdk/java/util/Collection.html
答案 4 :(得分:0)
(a-b)+(b-a)
// (a-b) return [1,5]
//(b-a) return []
// TOTAL = [1,5]+[]
这是我们的时候:a=[1,2,3,4,5],b=[2,3,4,5]
java.util.List.metaClass.oppIntersect={b->
return ((delegate-b)+(b-delegate))
}
然后
a.oppIntersect(b)
END!