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;
}