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も参照のこと。