How to Get All Keys From Map With a Value in Java


Suppose we want to get all keys from a hashmap that match a certain value in Java.

Let’s start with this hashmap.

Map<String, Integer> map = new HashMap<>();
map.put("corgi",    1);
map.put("pug",      2);
map.put("shih tzu", 3);
map.put("husky",    1);

1. Filtering with the Stream API (Java 8+)

If we’re using JDK8+, we can use the Stream API to obtain all keys matching a certain value.

List<String> getKeysWithValue(Map<String, Integer> map, Integer value) {
  return map
    .entrySet()
    .stream()
    .filter(e -> Objects.equals(e.getValue(), value))
    .map(Map.Entry::getKey)
    .collect(Collectors.toList());
}

We want to use Objects.equals() for comparisons here because hashmaps can contain null values.

2. Filtering with standard loops

If we’re using JDK7, we can obtain the same functionality using standard for loops.

List<String> getKeysWithValue(Map<String, Integer> map, Integer value) {
  List<String> keys = new ArrayList<String>();
  for(String key : map.keySet()) {
    if(Objects.equals(map.get(key), value))
      keys.add(key);
  }
  return keys;
}