私はint配列をListに変換しようとしていましたが、Java 8 Streamを使用するという馴染みのないルートを使用し、これを思いつきました
_Arrays.stream(arr).boxed().collect(Collectors.toList());
_
私はまだこの行を完全に理解するのにまだ苦労しています、ほとんどが、
この場合、Collectors.toList()
が_ArrayList<Integer>
_実装List
インターフェースを返すのはなぜですか? _LinkedList<Integer>
_またはList
インターフェースに準拠する他のジェネリッククラスを使用しないのはなぜですか? APIノートセクションでArrayList here の簡単な説明を除いて、これについては何も見つかりません。
の左側のパネルは何ですかStream.collect()
はどういう意味ですか?明らかにR
は一般的な戻り値の型です(私のコードでは_ArrayList<Integer>
_)。そして、私は_<R, A>
_がメソッドのジェネリック型引数であると思いますが、それらはどのように指定されますか? Collector インターフェースドキュメントを調べましたが、吸収できませんでした。
メソッド定義が示唆するように、それはArrayList
としてコレクターサプライヤーを持つコレクター実装を返します。したがって、以下のメソッド定義から、_Collectors.toList
_が常にArrayList collector(_While it's arguable why toList not toArrayList Word is used in method name
_)を返すことは非常に明確です。
_public static <T>
Collector<T, ?, List<T>> toList() {
return new CollectorImpl<>((Supplier<List<T>>) ArrayList::new, List::add,
(left, right) -> { left.addAll(right); return left; },
CH_ID);
}
_
<R, A> R collect(Collector<? super T, A, R> collector)
の左パネルの意味ドキュメンテーションコメントを参照すると、これらのジェネリック型が何であるかが正確に示されています。
_/*
@param <R> the type of the result
@param <A> the intermediate accumulation type of the {@code Collector}
@param collector the {@code Collector} describing the reduction
@return the result of the reduction
*/
<R, A> R collect(Collector<? super T, A, R> collector);
_