2017-06-01 36 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.