yohhoyの日記

技術的メモをしていきたい日記

空ストリームに対するallMatch/noneMatchはtrue

Java 8で導入されたStream APIに関して、空のストリームに対するallMatchおよびnoneMatch終端操作は常にtrueを返す。なお、空ストリームに対する anyMatchは常にfalseを返す。

// 整数値は偶数か?
IntPredicate isEven = n -> (n % 2 == 0);

IntStream.empty().allMatch(isEven);   // true
IntStream.empty().noneMatch(isEven);  // true
IntStream.empty().anyMatch(isEven);   // false

上記コードは “空ストリーム(空集合)の要素は全て偶数であり かつ 全て偶数ではない” を意味する。この振る舞いは集合論における "Vacuous Truth"*1 に対応する。

関連URL

*1:直訳すると「空虚な真」。wikipedia:en:Vacuous_truthも参照のこと。