私はリストにint配列を変換しようとしていたと私は、Java 8のストリームを使用するのではなじみのないルートを取り、これを思い付きました
Arrays.stream(arr).boxed().collect(Collectors.toList());
私はまだ、難易度は完全に主に、この行を理解してい
なぜ
Collectors.toList()
このような場合に返すArrayList<Integer>
実装するList
インターフェースは?なぜLinkedList<Integer>
、他の一般的なクラスは、に準拠またはList
インタフェース?私は、ArrayListので言及簡潔を除き、これについて何かを見つけることができませんここでは APIのノートセクションで、。左側のパネルには何の平均は?明らかに、(一般的な戻り値の型であるここに私のコードでは)。そして、私は考える方法のジェネリック型引数ですが、どのように指定されていますか?私は、に見えたコレクタインターフェースドキュメントと、それを吸収することができませんでした。
Stream.collect()
R
ArrayList<Integer>
<R, A>
これは、デフォルトの実装です。
ArrayList
それは、ほとんどのユースケースでは最高だが、それはあなたに適していないなら、あなたは常にあなた自身のコレクタを定義することができますし、ために工場を提供するので、使用されているCollection
あなたが望みます:Arrays.stream(arr).boxed().collect(toCollection(LinkedList::new));
はい、
A
そしてR
この方法の一般的なパラメータである、R
戻り型であり、T
入力タイプであり、A
要素の収集プロセス全体に現れるが(表示されない可能性があり、この機能に関係しない)ことは、中間型です。最初Collector
のJavadocは、これらの種類を(彼らは全体のドキュメント全体で一貫している)定義されています。T -リダクション演算の入力要素のタイプ
A - (多くの場合、実装の詳細として隠された)縮小操作の可変蓄積型
R -リダクション演算の結果の型