2017-06-01 10 views
6

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を使用するにはどうすればよいですか?

+2

、( 'l.streamを試してみてください)。mapToInt(整数:: intValue).toArray()' – 4castle

+0

はどのように私はこのかかわらずの結果を収集することができますか?これは、結果を格納せずにストリーム上で操作を実行するだけです。 –

+2

私の提案はあなたが使っていた間違ったラムダを扱います。それは今正しく収集されます。 – 4castle

答えて

6

利用プリミティブ整数のストリームを生成するためにmapToInt方法:

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

IntStreamint[]を生成するので、内側toArrayコールはもはや、int[]::newを必要としません。ラムダのために

Demo.

関連する問題