在 groovy 集合中相交的反面是什么?
问问题
18925 次
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 回答