21

在 groovy 集合中相交的反面是什么?

4

5 回答 5

30

您可能想结合@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 // []

我不认为你想要的

于 2011-04-19T10:10:43.233 回答
7

我不确定“联合的对立面”是什么意思,但我的猜测是您的意思是对称差异(AKA 集合差异或分离)。该操作的结果如下图红色所示。

在此处输入图像描述

对两个 Java/Groovy 集合执行此操作的最简单方法是使用Apache commons 集合提供的析取方法。

于 2011-04-19T14:02:22.640 回答
5

会不会是这个?

def leftCollection = [1,2,3,4,5]
def rightCollection = [2,3,4]
def opposite = leftCollection-rightCollection
println opposite

印刷

[1,5]
于 2011-04-19T08:48:59.417 回答
3

将 intersect 用于交叉点

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

于 2011-04-19T09:34:01.433 回答
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)

结尾!

于 2014-09-18T08:28:26.360 回答