Saltar al contenido

Unión o intersección de Java Sets

Te damos la bienvenida a proyecto online, aquí vas a encontrar la respuesta que andabas buscando.

Solución:

La solución de una línea más simple es esta:

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

La solución anterior es destructivo lo que significa que el contenido del original serie 1 Mi cambio. Si no desea tocar sus conjuntos existentes, cree un nuevo conjunto:

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

Si bien la guayaba es más ordenada y bastante estándar, aquí hay una forma no destructiva de hacerlo. Unión y intersecarse usando solo Java estándar

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

Set union = Stream.concat(s1.stream(),s2.stream()).collect(Collectors.toSet()); 
Set intersect = s1.stream().filter(s2::contains).collect(Collectors.toSet());

Puedes lograr esto usando Google's Guava library. La siguiente explicación se da a continuación con la ayuda de un ejemplo:

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

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

Ahora, calculando la intersección de dos conjuntos en Java:

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

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

De manera similar, Cálculo de la unión de dos conjuntos en Java:

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

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

Puede leer más sobre la biblioteca de guayaba en https://google.github.io/guava/releases/18.0/api/docs/

Para agregar la biblioteca de guayaba a su proyecto, puede ver https://stackoverflow.com/a/4648947/8258942

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *