2017-01-30 5 views
4
String[] arr={"121","4545","45456464"}; 
Arrays.stream(arr).filter(s->s.length()>4).toArray(String[]::new); 

でフィルタを使用すると、誰かが上記のコードでtoArray(String[]::new)で起こっているの正確何を教えてもらえます。ストリーム

+3

ですから、この質問は 'filter'または約' toArray'ですか? –

+1

[Java 8ストリームを配列に変換する方法は?](http://stackoverflow.com/questions/23079003/how-to-convert-a-java-8-stream-to-an-array) –

答えて

3

toArrayは、あなたのケースでfilter長さfilter戻りますが、配列に変換されStreamので、4以上であるすべての文字列の結果を含むString[]を作成しています。むしろ

Arrays.stream(arr).filter(s -> s.length() > 4).forEach(System.out::println); 
+0

その文字列を印刷するには? –

+1

'String []'に戻すのではなく、一般的に配列を出力する方法ですか?ストリームを印刷する方法を示す答えを更新しました –

+0

値がStringに格納されているかどうか、そのStringの参照とアクセス方法は何ですか? –

5

String[]::new配列にそれを格納するよりも、フィルタリングされた結果を印刷するために

は実際size -> new String[size]と同じです。 filterStreamに適用した後に、新しい番号String[]が要素数と同じサイズで作成されます。 Stream.toArray

1

のjavadocもString[]タイプの新しい演算子への参照です。 Java-8構文です。 toArrayメソッドStreamsは、ストリームの要素が収集される配列のジェネレータとしてIntFunction<A[]>をとります。これは書き込みと同じです:

Arrays.stream(arr).filter(s->s.length()>4).toArray(size-> { return new Integer[size]; }); 
関連する問題