今回はStream#collectの内部構造の概要を紹介する。 以前の記事では、Streamで加工したデータをList等のデータ構造に変換する際にcollect(Collectors.toList())のようなコードを書いた。 しかしStream#collectはStream APIの汎用的な終端操作であるため、Listだけでなく様々なデータ構造への変換が可能である。 可変リダクション操作とは Stream#collect および、今回解説するCollectorのJavadocには、「可変リダクション操作(mutable reduction operation)」という言葉が登場するので、ここで簡単に説明しておく。 「リダクション操作」とは、一連の要素に特定の演算を適用して1つにまとめる操作である。 たとえば、数値のリストの合計値を求める処理は、数値リストに要素同士の加算という演算を適用し