如何在原始数组中收集Stream的结果?

时间:2017-06-01 01:42:26

标签: java java-8 java-stream primitive

我正在尝试将2D列表转换为2D int数组。但是,似乎我只能收集对象,而不是基元。

当我这样做时:

data.stream().map(l -> l.stream().toArray(int[]::new)).toArray(int[][]::new);

我收到编译时错误Cannot infer type argument(s) for <R> map(Function<? super T,? extends R>)

但是,如果我将int[]更改为Integer[],则会进行编译。如何才能使用int

1 个答案:

答案 0 :(得分:9)

使用mapToInt方法生成基本整数流:

int[][] res = data.stream().map(l -> l.stream().mapToInt(v -> v).toArray()).toArray(int[][]::new);

内部toArray来电不再需要int[]::new,因为IntStream会产生int[]

Demo.