这是考虑此问题的另一种方法:
allMatch()
是&&
什么sum()
是+
考虑以下逻辑语句:
IntStream.of(1, 2).sum() + 3 == IntStream.of(1, 2, 3).sum()
IntStream.of(1).sum() + 2 == IntStream.of(1, 2).sum()
这是有道理的,因为这sum()
只是的概括+
。但是,当您再删除一个元素时会发生什么?
IntStream.of().sum() + 1 == IntStream.of(1).sum()
我们可以看到,IntStream.of().sum()
以特定的方式定义或空序列的总和是有意义的。这为我们提供了求和的“身份元素”,或者当它添加到某物时没有作用的值(0
)。
我们可以将相同的逻辑应用于Boolean
代数。
Stream.of(true, true).allMatch(it -> it) == Stream.of(true).allMatch(it -> it) && true
更笼统地说:
stream.concat(Stream.of(thing)).allMatch(it -> it) == stream.allMatch(it -> it) && thing
如果stream = Stream.of()
这样,该规则仍然需要适用。我们可以使用&&的“ identity element”来解决这个问题。true && thing == thing
所以Stream.of().allMatch(it -> it) == true
。
allMatch
返回true,那么也应该如此anyMatch
。另外,对于空的情况,allMatch(...) == noneMatch(...)
这也很奇怪。