uniĆ³n simetrica operaciones interseccion entre ejercicios diferencia conjuntos complemento java set

java - simetrica - Obteniendo la diferencia entre dos conjuntos



operaciones entre conjuntos union (4)

Prueba esto

test2.removeAll(test1);

Set#removeAll

Elimina de este conjunto todos sus elementos que están contenidos en la colección especificada (operación opcional). Si la colección especificada también es un conjunto, esta operación modifica efectivamente este conjunto de modo que su valor sea la diferencia del conjunto asimétrico de los dos conjuntos.

Entonces, si tengo dos juegos:

Set<int> test1 = new HashSet<Integer>(); test1.add(1); test1.add(2); test1.add(3); Set<int> test2 = new HashSet<Integer>(); test2.add(1); test2.add(2); test2.add(3); test2.add(4); test2.add(5);

¿Hay alguna forma de compararlos y solo se devuelve un conjunto de 4 y 5?


Sí:

test2.removeAll(test1)

Aunque esto mutará la test2 , entonces crea una copia si necesitas preservarla.

Además, probablemente significó <Integer> lugar de <int> .


Si está utilizando Java 8, podría intentar algo como esto:

public Set<Number> difference(final Set<Number> set1, final Set<Number> set2){ final Set<Number> larger = set1.size() > set2.size() ? set1 : set2; final Set<Number> smaller = larger.equals(set1) ? set2 : set1; return larger.stream().filter(n -> !smaller.contains(n)).collect(Collectors.toSet()); }


Si usa la biblioteca de Guava (antigua colección de Google), hay una solución:

SetView<Number> difference = com.google.common.collect.Sets.difference(test2, test1);

El SetView devuelto es un Set , es una representación en vivo que puede hacer inmutable o copiar a otro conjunto. test1 y test2 se dejan intactos.