【发布时间】:2015-07-25 05:28:31
【问题描述】:
我和我的同事遇到了一个错误,这是由于我们假设调用allMatch() 的空流将返回false。
if (myItems.allMatch(i -> i.isValid()) {
//do something
}
当然,假设而不是阅读文档是我们的错。但我不明白为什么空流的默认allMatch() 行为返回true。这样做的原因是什么?与anyMatch() (相反地返回false)一样,此操作以离开monad 的命令方式使用,并且可能在if 语句中使用。考虑到这些事实,是否有任何理由为什么在空流上默认为 allMatch() 对于大多数用途来说是可取的?
【问题讨论】:
-
这有点奇怪。我们期望如果
allMatch返回true,那么anyMatch也应该如此。此外,对于空的情况,allMatch(...) == noneMatch(...)这也很奇怪。 -
关于语法的简短说明:不要将谓词写成
i -> i.isValid(),而可以写成Foo::isValid(当然,Foo是你正在流式传输的任何类) -
“这个操作以一种离开 monad 的命令方式使用”——我怀疑这会影响任何决定。
标签: java lambda java-8 java-stream