关于Java 8读了一下,我得this博客文章,解释了一下关于流和减少他们的,当它有可能短路的减少。在底部它规定:在findFirst
或findAny
的情况下Java的8个流短路
报告中,我们只需要相匹配的谓词(尽管
findAny
不保证返回第一个)的第一个值。但是,如果该流没有订购,那么我们预计findFirst
的行为将类似于findAny
。操作allMatch
,noneMatch
和anyMatch
可能不短路流,因为在所有可能需要评估所有的值,以确定操作者是否是true
或false
。因此使用这些的无限流可能不会终止。
我得到findFirst
或findAny
可以减少短路,因为一旦自动对焦您找到一个元素,你不需要进一步处理任何。
但为什么这不可能为allMatch
,noneMatch
和anyMatch
?对于allMatch
,如果找到与谓词不匹配的一个,则可以停止处理。没有。而anyMatch
对我来说尤其没有意义,因为它几乎等于findAny
(除了返回的内容)?
说,这三种可能不会短路,因为这可能会评估所有的值,也可以为findFirst/Any
说。
我错过了一些基本的区别吗?我真的不明白发生了什么事吗?
“可能不”,如“可能不”,而不是“不允许”。 – Andreas
@Andreas是的,我只是没有得到差异来自哪里。所有的东西都可以按照我看的方式进行短路? – Koekje