Closed. This question needs details or clarity。它当前不接受答案。
想要改善这个问题吗?添加详细信息,并通过editing this post来解决问题。
1年前关闭。
Improve this question
像filter + findFirst一样,anyMatch是否具有确定性(针对有序流)?
除了返回值以外,还有其他区别吗?
如果我有一个有序的流asList(“a”,“b”,“c”)。filter(predicate).findFirst(),则可以确保以给定的顺序对流的每个元素进行谓词评估(“a”比“b”比“c”)匹配,直到匹配为止(findFirst)。我想知道asList(“a”,“b”,“c”)。anyMatch(predicate)是否也将按给定顺序评估谓词(“a”而不是“b”而不是“c”)?
内部流可以“记住”该流的最小值为
我非常怀疑这样的优化(可能甚至比“优化”更有害)是否会实现。但理论上是可能的。
想要改善这个问题吗?添加详细信息,并通过editing this post来解决问题。
1年前关闭。
Improve this question
像filter + findFirst一样,anyMatch是否具有确定性(针对有序流)?
除了返回值以外,还有其他区别吗?
如果我有一个有序的流asList(“a”,“b”,“c”)。filter(predicate).findFirst(),则可以确保以给定的顺序对流的每个元素进行谓词评估(“a”比“b”比“c”)匹配,直到匹配为止(findFirst)。我想知道asList(“a”,“b”,“c”)。anyMatch(predicate)是否也将按给定顺序评估谓词(“a”而不是“b”而不是“c”)?
最佳答案
这里没有什么可确定的。至少您要进行的比较没有什么意义。 filter.findFirst
将返回Optional<T>
,因此,如果您关心找到哪个元素,那么对于有序流而言,它真的是第一个吗?如果是这样,答案是肯定的-但您似乎已经意识到了这一点。
在anyMatch
的情况下-确定性仅与结果有关,即boolean
,因此实际上没有太多可确定性的。是否用于有序流。结果将“确定地”为true/false
-这是您获得的唯一保证。
如果您的问题是在使用anyMatch
的情况下是否从头开始遍历流,则完全是另外一个问题。当然,这是一个实现细节。但不必那样遍历。在anyMatch
的情况下,流内部结构很容易具有不同的路径:这是一个完整的示例,但完全可能:
Stream.of(6, 5, 4, 3, 2, 1)
.sorted(Comparator.naturalOrder())
.anyMatch(x -> x > 4);
内部流可以“记住”该流的最小值为
1
,最大值为6
,因为此anyMatch
可以采用6
并针对max
进行测试,如果匹配,就可以了。因此,可以与最后一个元素6
进行比较,该元素将与filter.findFirst
-5
不同。我非常怀疑这样的优化(可能甚至比“优化”更有害)是否会实现。但理论上是可能的。
关于java - 像filter + findFirst一样,anyMatch具有确定性吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57658411/
10-11 20:14