I\'m kinda new to Java 8\'s new features. I am learning how to filter a map by entries. I have looked at this tutorial and this post for my problem, but I am unable to solve.
Your are returning Map not hashMap so you need to change map type to java.util.Map. Moreover you can use method reference rather then calling getKey, getValue. E.g.
Map<String, Integer> map = new HashMap<>();
map.put("1", 1);
map.put("2", 2);
map = map.entrySet()
.parallelStream()
.filter(e -> e.getValue() > 1)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
You could solve it by using some intellij help as well for e.g. if you press ctrl+alt+v in front of
new HashMap<>();
map.put("1", 1);
map.put("2", 2);
map = map.entrySet()
.parallelStream()
.filter(e -> e.getValue() > 1)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
The variable created by intellij will be of exact type and you will get.
Map<String, Integer> collect = map.entrySet()
.parallelStream()
.filter(e -> e.getValue() > 1)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
The message is misleading but your code does not compile for another reason: collect returns a Map<String, Integer> not a HashMap.
If you use
Map<String, Integer> map = new HashMap<>();
it should work as expected (also make sure you have all the relevant imports).