Suppression de tous les éléments d'une valeur donnée à partir d'une table de hachage
J'ai donc un java hashmap comme ci-dessous:
hMap.put("1", "One");
hMap.put("2", "Two");
hMap.put("3", "Two");
Je voudrais supprimer TOUS les éléments dont la valeur est "Deux"
Si je fais quelque chose comme:
hmap.values().remove("Two");
Seul le premier est supprimé, je veux les supprimer tous, comment cela peut-il être fait?
Vous devez vous connecter pour publier un commentaire.
hmap.values().removeAll(Collections.singleton("Two"));
EDIT: (considérables) inconvénient avec cette approche concise, c'est que vous êtes obligés de commenter, disant quelque chose comme
//remove("Two") would only remove the first one
sinon, certains bien intentionnés ingénieur vais essayer de le simplifier pour vous un jour et de le briser. Ce qui se passe... parfois bien intentionnés bonne âme est même l'Avenir Vous!
Dans Java 8
Vous pouvez utiliser
while( hmap.values().remove("Two") );
depuis la suppression de l'appel renvoietrue
si la collection a été changé en raison de l'appel.(Mise à jour de la solution pour l'enregistrement de retiré valeurs)
Cette solution utilise le google-collections de la bibliothèque [LIEN]
Remarque - Cette solution tire parti du fait que la Carte retournée par le filterValues appel est une vision des éléments à l'origine, HashMap. Cela nous permet de les examiner et de déconnecter les touches qui ont été enlevés, et puis les retirer de la carte d'origine avec un simple appel à clear().
Vous pouvez avoir des raisons pour ne pas vouloir utiliser le google-collections de la bibliothèque dans votre projet, mais si vous ne le faites pas, je vous suggère de le vérifier.
Vous devez parcourir la liste, regardez la valeur de l'objet, et à condition de ne l'enlever. Remarque: vous obtiendrez une exception si vous essayez de supprimer un objet lors de l'itération sur une
HashMap
. Aurait à faire une copie de la carte ou utiliserConcurrentHashMap
.