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

Ale*_*iam 9 java primitive java-8 java-stream

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

当我做:

data.stream().map(l -> l.stream().toArray(int[]::new)).toArray(int[][]::new);
Run Code Online (Sandbox Code Playgroud)

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

但是,如果我int[]改为Integer[],则编译.我如何才能使用它int

das*_*ght 11

使用mapToInt方法生成原始整数流:

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

内部toArray召唤不再需要int[]::new,因为IntStream生产int[].

演示.