如何在基元数组中收集流的结果?

2022-09-02 21:16:18

我正在尝试将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

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

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

内部调用不再需要 ,因为产生 。toArrayint[]::newIntStreamint[]

演示。


答案 2