问题
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
?
回答1:
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[]
.
Demo.
来源:https://stackoverflow.com/questions/44297189/how-to-collect-the-results-of-a-stream-in-a-primitive-array