我和我的同事有一个错误,这是由于我们假设调用 allMatch()
的空流将返回 false
。
if (myItems.allMatch(i -> i.isValid()) {
//do something
}
当然,假设而不阅读文档是我们的错。但我不明白的是为什么空流的默认 allMatch()
行为返回 true
。这样做的原因是什么?与 anyMatch()
(相反返回 false)一样,此操作以脱离 monad 的命令方式使用,并且可能用于 if
语句。考虑到这些事实,有什么理由可以让 allMatch()
默认为 true
对于大多数用途来说是理想的空流?
原文由 tmn 发布,翻译遵循 CC BY-SA 4.0 许可协议
这被称为 空洞的真理。空集合的所有成员都满足您的条件;毕竟,你能指出一个没有的吗?
同样,
anyMatch
返回false
,因为您无法在集合中找到与条件匹配的元素。这让很多人感到困惑,但事实证明这是为空集定义“任何”和“所有”的最有用和最一致的方式。