I want to init a Map
and want to always put the same BigDecimal
value from outside of the stream.
BigDeci
As already said in the other answers, you need to specify a function which maps each element to the fixed value like element -> samePrice
.
As an addition, if you want to specifically fill a ConcurrentHashMap
, there is a neat feature that doesn’t need a stream operation at all:
ConcurrentHashMap<String,BigDecimal> map = new ConcurrentHashMap<>();
map.keySet(samePrice).addAll(set);
Unfortunately, there is no such operation for arbitrary Map
s.
The second argument (like the first one) of toMap(keyMapper, valueMapper) is a function that takes the stream element and returns the value of the map.
In this case, you want to ignore it so you can have:
set.stream().collect(Collectors.toMap(Function.identity(), e -> samePrice));
Note that your second attempt wouldn't work for the same reason.
Collectors#toMap
expects two Functions
set.stream().collect(Collectors.toMap(Function.identity(), x -> samePrice));
You can find nearly the same example within the JavaDoc
Map<Student, Double> studentToGPA students.stream().collect(toMap(Functions.identity(), student -> computeGPA(student)));