Convert IntStream to Map
16,931
Here is my code, it will work for you.
Function Reference version
public class AppLauncher {
public static void main(String a[]){
Map<Integer,Integer> map = IntStream.range(1,10).boxed().collect(Collectors.toMap(Function.identity(),AppLauncher::computeSmth));
System.out.println(map);
}
public static Integer computeSmth(Integer i){
return i*i;
}
}
Lambda expression version
public class AppLauncher {
public static void main(String a[]){
Map<Integer,Integer> map = IntStream.range(1,10).boxed().collect(Collectors.toMap(Function.identity(),i->i*i));
System.out.println(map);
}
}
Related videos on Youtube
Author by
maks
Updated on September 14, 2022Comments
-
maks over 1 year
I have an
IntStream
and want for each element of that stream to do some calculations and return them asMap
where keys are int values and values are result of that computations. I wrote following piece of code:IntStream.range(0,10) .collect( Collectors.toMap(Function.identity(), i -> computeSmth(i)));
where
computeSmth(Integer a)
. I got next compiler errormethod collect in interface java.util.stream.IntStream cannot be applied to given types; required: java.util.function.Supplier<R>,java.util.function.ObjIntConsumer<R>,java.util.function.BiConsumer<R,R> found: java.util.stream.Collector<java.lang.Object,capture#1 of ?,java.util.Map<java.lang.Object,java.lang.String>> reason: cannot infer type-variable(s) R (actual and formal argument lists differ in length)
What I'm doing wrong?
-
Misha almost 8 years
IntStream
only has the 3-argumentcollect
. You should either rewrite yourtoMap
in 3-arument form or convertIntStream
toStream<Integer>
with.boxed()
-
-
user1075613 over 6 yearsindeed,
.boxed()
was the key to success !