Reputation: 1251
I'm trying to convert 2D list to a 2D int
array. However, it seems I can only collect objects, not primitives.
When I do:
data.stream().map(l -> l.stream().toArray(int[]::new)).toArray(int[][]::new);
I get the compile-time error Cannot infer type argument(s) for <R> map(Function<? super T,? extends R>)
.
However, if I change int[]
to Integer[]
, it compiles. How can I get it to just use int
?
Upvotes: 26
Views: 16536
Reputation: 726619
Use mapToInt
method to produce a stream of primitive integers:
int[][] res = data.stream().map(l -> l.stream().mapToInt(v -> v).toArray()).toArray(int[][]::new);
The inner toArray
call no longer needs int[]::new
, because IntStream
produces int[]
.
Upvotes: 34