Противоположность intersect в коллекциях groovy

Что было бы противоположностью intersect в коллекциях groovy?

5 ответов


вы, вероятно, хотите объединить оба ответа от @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 // []

Я не думаю, что вы хотели


Я не уверен, что вы подразумеваете под "противоположностью Союза", но я предполагаю, что вы имеете в виду симметричную разницу (АКА установить разницу или дизъюнкцию). Результат этой операции показан красным цветом ниже.

enter image description here

самый простой способ выполнить эту операцию на двух коллекциях Java/Groovy-использовать дизъюнкция метод, предоставляемый коллекциями Apache commons.


может ли это быть так?

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

печать

[1,5]

используйте 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


(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)

конец!