2012-01-16 18 views

Respuesta

263

utilizar el método de retainAll() de Set:

Set<String> s1; 
Set<String> s2; 
s1.retainAll(s2); // s1 now contains only elements in both sets 

Si desea conservar los conjuntos, crear un nuevo conjunto para mantener la intersección:

Set<String> intersection = new HashSet<String>(s1); // use the copy constructor 
intersection.retainAll(s2); 

El javadoc de retainAll() dice que es exactamente lo que quiere:

Conserva solo los elementos de este conjunto que están contenidos en la colección especificada (operación opcional). En otras palabras, elimina de este conjunto todos sus elementos que no están contenidos en la colección especificada. Si la colección especificada también es un conjunto, esta operación modifica efectivamente este conjunto de modo que su valor sea intersección de los dos conjuntos.

+0

Sólo una nota para cualquiera que quiera utilizar retainAll en otra colección, tales como una lista con los elementos duplicados. Dependiendo del contenido de la colección, puede lanzar UnsupportedOperationException y tampoco filtrará las frecuencias correctamente (retiene todas las ocurrencias de un valor en el multiset izquierdo, independientemente de cuántas veces ocurra en el multiset derecho). – Allison

30

sí hay retainAll la salida this

Set<Type> intersection = new HashSet<Type>(s1); 
intersection.retainAll(s2); 
Cuestiones relacionadas