J'ai un Map<String, ArrayList>
et un Set<String>
. Existe-t-il un moyen de "couper" les clés de la carte avec l'ensemble de chaînes de sorte que seules les paires avec la clé donnée restent, sans itérer sur toute la carte ? Ma principale préoccupation est la performance et réinventer la roue sur quelque chose qui peut être fait avec plus d'élégance.
Réponses
Trop de publicités?Faites juste :
map.keySet().retainAll(set);
Conformément à la javadoc , les modifications apportées au jeu de clés sont répercutées dans la carte.
... L'ensemble est soutenu par la carte, donc les modifications apportées à la carte sont reflétées dans l'ensemble, et vice-versa. ...
Voici une démo :
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}
Siddhartha
Points
563
Élaborant sur l'excellente réponse de BalusC, values() prend également en charge keepAll() :
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 conserve également les valeurs en double, comme vous pouvez vous y attendre :
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}