2011-07-18 10 views

Respuesta

84

Just Do:

map.keySet().retainAll(set); 

Según el javadoc, los cambios en el conjunto de claves se reflejan de nuevo en el mapa.

... El conjunto está respaldado por el mapa, por lo que los cambios en el mapa se reflejan en el conjunto, y viceversa. ...

He aquí una demostración:

Map<String, String> map = new HashMap<String, String>(); 
map.put("1", "one"); 
map.put("2", "two"); 
map.put("3", "three"); 

Set<String> set = new HashSet<String>(); 
set.add("1"); 
set.add("3"); 

map.keySet().retainAll(set); 

System.out.println(map); // {3=three, 1=one} 
+2

Wow. Nunca se supo que 'KeySet' era compatible con' retainAll'. Tan útil. –

+0

usando colecciones desde 1.1 - y tampoco lo sabía. – javadba

+0

Increíblemente útil. values ​​() también lo admite. – Siddhartha

5

Abundando en excelente respuesta de BalusC, los valores de() soporta retainAll(), así:

Map<String, String> map = new HashMap<String, String>(); 
map.put("1", "one"); 
map.put("2", "two"); 
map.put("3", "three"); 

Set<String> set = new HashSet<String>(); 
set.add("one"); 
set.add("two"); 

map.values().retainAll(set); 

System.out.println(map); // prints {1=one, 2=two} 

retailAll conserva valores duplicados, así, como era de esperar:

Map<String, String> map = new HashMap<String, String>(); 
map.put("1", "one"); 
map.put("2", "two"); 
map.put("3", "three"); 
map.put("4", "two"); 

Set<String> set = new HashSet<String>(); 
set.add("one"); 
set.add("two"); 

map.values().retainAll(set); 

System.out.println(map); // prints {1=one, 2=two, 4=two} 
Cuestiones relacionadas