java values Removing all items of a given value from a hashmap




to delete all pairs of keys and values in a given hashmap (5)

hmap.values().removeAll(Collections.singleton("Two"));

EDIT: the (significant) disadvantage with this concise approach is that you are basically forced to comment it, saying something like

// remove("Two") would only remove the first one

otherwise, some well-meaning engineer will try to simplify it for you someday and break it. This happens... sometimes the well-intentioned do-gooder is even Future You!

So I have a java hashmap like below:

hMap.put("1", "One");
hMap.put("2", "Two");
hMap.put("3", "Two");

I would like to remove ALL items where the value is "Two"

If I do something like:

hmap.values().remove("Two");

Only the first one is deleted, I want to remove them all, how can this be done?


for (Iterator<Map.Entry<String,String>> it = hMap.entrySet().iterator(); it.hasNext();) {
 Map.Entry<String,String> e = it.next();
 if ("Two".equals(e.getValue())) {
  it.remove();
 }
}


You can use while( hmap.values().remove("Two") ); since the remove call returns true if the collection was changed as a result of the call.


In Java 8

hmap.values().removeIf(val -> "Two".equals(val));

You have to iterate through the list, look at the value object, and conditionally do the remove. Note you'll get an exception if you try to remove an object while iterating over a HashMap. Would have to make a copy of the map or use ConcurrentHashMap.





hashmap