web-dev-qa-db-ja.com

ストリームの結果をプリミティブ配列に収集するにはどうすればよいですか?

2Dリストを2Dint配列に変換しようとしています。ただし、収集できるのはオブジェクトのみで、プリミティブは収集できないようです。

私がする時:

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

10
Alex Quilliam

mapToInt メソッドを使用して、プリミティブ整数のストリームを生成します。

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

toArrayint[]::newを生成するため、内部のIntStream呼び出しはint[]を必要としなくなりました。

デモ

11
dasblinkenlight