Java
NULL
Stream
StreamAPI

Streamでcollect(Collectors.toList())は絶対にnullにならない件

collect(Collectors.toList())を使用した場合、戻り値のnullチェックが必要かどうか調べました。

可変リダクション操作(mutable reduction operation)とは

リダクション操作とは、一連の要素に特定の演算を適用して1つにまとめる操作です。
Stream#collectでは、Listのような可変なオブジェクトに要素を収集するため、「可変リダクション操作」と呼んでいるようです。

Collector

Collectorインターフェースでは4つのメソッドを定義しており、4つのメソッドの戻り値は全て関数オブジェクトになっています。

メソッド 工程
supplier 前処理
accumulator 集積
combiner 結合
finisher 後処理

Collector.toList()

toList()のソースを見てみると、前処理はArrayListをnewしているため、
空リストが必ず生成されて、戻り値はnullにはならないことをわかりました。

Collectors.java
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);
}

ということで、null checkは不要、empty checkだけで十分です。