Противоположность 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 // []
Я не думаю, что вы хотели
Я не уверен, что вы подразумеваете под "противоположностью Союза", но я предполагаю, что вы имеете в виду симметричную разницу (АКА установить разницу или дизъюнкцию). Результат этой операции показан красным цветом ниже.
самый простой способ выполнить эту операцию на двух коллекциях 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)
конец!