I am getting
Cannot infer type arguments for java.util.HashMap<>
for the following code
class Test {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>();
map.put(1, "x");
map.put(2, "y");
map.put(3, "x");
map.put(4, "z");
//the following line has error
Map<String, ArrayList<Integer>> reverseMap = new java.util.HashMap<>(map.entrySet().stream()
.collect(Collectors.groupingBy(Map.Entry::getValue)).values().stream()
.collect(Collectors.toMap(item -> item.get(0).getValue(),
item -> new ArrayList<>(item.stream().map(Map.Entry::getKey).collect(Collectors.toList()))));
System.out.println(reverseMap);
}
}
What went wrong and Can anyone Explain me this ? I have checked for proper imports and found out that I am importing java.util.hashmap and none other. Still the pesky error is buging me.
That's a bug in ecj
(eclipse compiler), you can work around it and add more type information :
item -> new ArrayList<Integer>(item.stream().map(Entry::getKey)
See how I've added ArrayList<Integer>
.
It compiles fine with javac-8 and 9
.
And btw seems like there is a simpler way to do things:
map.entrySet()
.stream()
.collect(Collectors.groupingBy(
Entry::getValue,
HashMap::new,
Collectors.mapping(Entry::getKey, Collectors.toList())));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With