2017-06-01 35 views
6

我试图将2D列表转换为2D int数组。但是,似乎我只能收集物体,而不是原始物体。如何收集原始数组中的Stream的结果?

当我这样做:

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

+2

对于拉姆达,尝试'l.stream()。mapToInt(整数::的intValue).toArray()' – 4castle

+0

我怎样才能收集这个结果虽然?这只是在Stream上执行操作而不存储结果。 –

+2

我的建议处理您使用的不正确的lambda。它现在会收集好。 – 4castle

回答

6

使用mapToInt方法以产生原始整数的流:

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

toArray呼叫不再需要int[]::new,因为IntStream产生int[]

Demo.