与常规集合中的交叉相反

时间:2011-04-19 08:34:41

标签: collections groovy intersect

与groovy集合中的交叉相反的是什么?

5 个答案:

答案 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集差异或分离)。此操作的结果在下面以红色显示。

enter image description here

在两个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]

OOP:

java.util.List.metaClass.oppIntersect={b->
  return ((delegate-b)+(b-delegate))
}

然后

a.oppIntersect(b)

END!