web-dev-qa-db-fra.com

Union et intersection de Java Sets

Quelle est la manière la plus simple de faire une union ou une intersection de Sets en java? J'ai vu d'étranges solutions à ce problème simple (par exemple, itérer manuellement les deux ensembles).

enter image description hereenter image description here

7
Mahozad

La solution monoligne la plus simple est la suivante:

set1.addAll(set2); // Union
set1.retainAll(set2); // Intersection

La solution ci-dessus est destructive ce qui signifie que le contenu de l'original set1 ma modification. Si vous ne voulez pas toucher vos ensembles existants, créez un nouvel ensemble:

Set<E> result = new HashSet<>(set1);
 // └─ your specific type
result.addAll(set2); // Union
result.retainAll(set2); // Intersection
12
Mahozad

Alors que la goyave est à coup sûr plus propre et à peu près standard, voici une façon non destructive de faire l'union et de se croiser en utilisant uniquement du Java standard

Set s1 = Set.of(1,2,3);
Set s2 = Set.of(3,4,5);     

Set union = Stream.concat(s1.stream(),s2.stream()).toSet(); 
Set intersect = s1.stream().filter(s2::contains).toSet();
8
David Lilljegren

Vous pouvez y parvenir en utilisant Google's Guava library. L'explication suivante est donnée ci-dessous à l'aide d'un exemple:

    // Set a
    Set<String> a = new HashSet<String>();
    a.add("x");
    a.add("y");
    a.add("z");

    // Set b
    Set<String> b = new HashSet<String>();
    b.add("x");
    b.add("p");
    b.add("q");

Maintenant, calcul de l'intersection de deux ensembles en Java:

Set<String> intersection = Sets.intersection(a, b);
System.out.printf("Intersection of two Set %s and %s in Java is %s %n",
                a.toString(), b.toString(), intersection.toString());

Sortie: Intersection of two Set [z, y, x] and [q, p, x] in Java is [x]

De même, Calcul de l'union de deux ensembles en Java:

Set<String> union = Sets.union(a, b);
System.out.printf("Union of two Set %s and %s in Java is %s %n",
                a.toString(), b.toString(), union.toString());

Sortie: Union of two Set [z, y, x] and [q, p, x] in Java is [q, p, x, z, y]

Vous pouvez en savoir plus sur la bibliothèque de goyave sur https://google.github.io/guava/releases/18.0/api/docs/

Afin d'ajouter la bibliothèque de goyave à votre projet, vous pouvez voir https://stackoverflow.com/a/4648947/8258942

3
Nitin Bisht