I\'d like to convert a Map
from List
in java 8 something like this:
Map
As already noted, the parameters to Collectors.toMap have to be functions, so you have to change 0
to name -> 0
(you can use any other parameter name instead of name
).
Note, however, that this will fail if there are duplicates in names
, as that will result in duplicate keys in the resulting map. To fix this, you could pipe the stream through Stream.distinct first:
Map namesMap = names.stream().distinct()
.collect(Collectors.toMap(s -> s, s -> 0));
Or don't initialize those defaults at all, and use getOrDefault or computeIfAbsent instead:
int x = namesMap.getOrDefault(someName, 0);
int y = namesMap.computeIfAbsent(someName, s -> 0);
Or, if you want to get the counts of the names, you can just use Collectors.groupingBy and Collectors.counting:
Map counts = names.stream().collect(
Collectors.groupingBy(s -> s, Collectors.counting()));