我和我的同事遇到了一个错误,这是由于我们假设空流调用allMatch()
会回来false
.
if (myItems.allMatch(i -> i.isValid()) {
//do something
}
当然,假设而不阅读文档是我们的错误。但我不明白的是为什么默认allMatch()
空流返回的行为true
。这样做的理由是什么?像anyMatch()
(相反返回 false),此操作以命令式方式使用,脱离了 monad,并且可能用于if
陈述。考虑到这些事实,是否有任何理由allMatch()
默认为true
在空流上对于大多数用途来说是理想的吗?
这被称为空洞的真理 http://en.wikipedia.org/wiki/Vacuous_truth。空集合的所有成员都满足您的条件;毕竟,你能指出一个没有的吗?
相似地,anyMatch
回报false
,因为您无法在集合中找到与条件匹配的元素。这让很多人感到困惑,但事实证明这是为空集定义“任意”和“全部”的最有用且一致的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)