I want to transform a List<String>
into a Map<String, Integer>
. The lists' values should serve as keys, and the map value will be statically initialized.
I want to keep the order of the list, thus using a LinkedHashMap
, and ignore duplicates.
Question: is there any advantage using the java8 stream
API? Because, comparing the following, simply regarding the syntax I'd never go for the verbose stream api, but always sticking to the old foreach
loop:
//foreach
Map<String, Integer> map = new LinkedHashMap<>();
for (String k : abk) {
if (k != null) map.put(k, STATIC_VAL);
}
//streams
Map<String, Integer> map2 = abk.stream()
.filter(Objects::nonNull)
.collect(Collectors.toMap(
Function.identity(),
k -> STATIC_VAL,
(v1, v2) -> v1,
LinkedHashMap::new));
Would you stick to the old approach or go with new lambda expressions?
keys
. Because the map is initialized with a static value, I don't care for duplicate keys.getOrDefault
method that's been added toMap
to be quite useful.