Question En face de l'intersection dans les collections groovy


quel serait le contraire de l'intersection dans les collections groovy?


20
2018-04-19 08:34


origine


Réponses:


Vous voulez probablement combiner les réponses de @Andre et @denis

Je pense que ce que vous voulez, c'est l'union puis soustraire l'intersection de cette

def a = [1,2,3,4,5]
def b = [2,3,4]

assert [1,5] == ( a + b ) - a.intersect( b )

La solution donnée par denis dépendra si vous faites

def opposite = leftCollection-rightCollection // [1,5]

ou

def opposite = rightCollection-leftCollection // []

ce que je ne pense pas que tu voulais


24
2018-04-19 10:10



Serait-ce cela?

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

Des tirages

[1,5]

5
2018-04-19 08:48



Je ne suis pas certain de ce que vous entendez par «opposé à l'union», mais je suppose que vous voulez dire une différence symétrique (différence ou disjonction définie par AKA). Le résultat de cette opération est indiqué en rouge ci-dessous.

enter image description here

La méthode la plus simple pour effectuer cette opération sur deux collections Java / Groovy consiste à utiliser le disjonction méthode fournie par les collections Apache commons.


5
2018-04-19 14:02



utiliser l'intersection pour les intersections

assert [4,5] == [1,2,3,4,5].intersect([4,5,6,7,8])

utiliser + pour les syndicats:

assert [1,2,3,4,5] == [1,2,3] + [4,5]

voir http://groovy.codehaus.org/groovy-jdk/java/util/Collection.html


3
2018-04-19 09:34



(a-b)+(b-a)
// (a-b) return [1,5]
//(b-a) return []
// TOTAL = [1,5]+[]

c'est quand nous avons: a=[1,2,3,4,5],b=[2,3,4,5]

POO:

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

puis

a.oppIntersect(b)

FIN!


0
2017-09-18 08:28