- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是 Java 的 Stream API 的新手,我对这个案例的结果感到困惑:
Stream<String> stream = Stream.of("A","B","C","D");
System.out.println(stream.peek(System.out::println).findAny().get());
这打印:
A
A
为什么不打印:
A
A
B
B
C
C
D
D
最佳答案
findAny
method没有找到所有元素;它只找到一个元素。
Returns an
Optional
describing some element of the stream, or an emptyOptional
if the stream is empty.This is a short-circuiting terminal operation.
在调用终端方法之前不会处理流,在本例中为 findAny
.但是 peek
method在元素被终端操作消耗之前,不会对元素执行操作。
In cases where the stream implementation is able to optimize away the production of some or all the elements (such as with short-circuiting operations like
findFirst
, or in the example described incount()
), the action will not be invoked for those elements.
findAny
方法是短路,所以peek
的操作只会针对 findAny
找到的元素调用.
这就是为什么你只能得到两个 A
打印输出中的值。一个是由 peek
打印的方法,然后打印第二个,即 Optional
中的值由 findAny
返回.
关于java - 使用 peek 和 findAny 对 Java Stream 结果感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54559488/
Stream 的 findAny 方法选择此流中的任何元素。 findAny 方法的行为是不确定的,可以自由选择此流中的任何元素。 findAny 方法对于在并行操作中获得最大性能很有用,但不能保证每
考虑这段代码 Object found = collection.stream() .filter( s -> myPredicate1(s)) .filter( s -> myPre
我正在使用流过滤器 findAny.orElse,但它没有像我预期的那样工作,所以我想我不了解它的真正工作原理。这是我的代码 return Stream.of(getObjectAttributeVa
我不知道 Streams 内部是如何工作的,但我一直想知道为什么 Stream#findAny() 存在,而有 Stream#findFirst()。 Find first 建议流保持创建它们的数组/
我正在尝试查找列表中与给定谓词匹配的第一个(任何)成员,如下所示: Item item = items.parallelStream() .map(i -> i.doSomethingExpens
我想知道如何在数据流中使用 findAny(),当它没有找到任何巧合时,它不会返回 null。 String CountryFinal= "Spain"; List listContries = ne
在我的 Spring 应用程序中,我有一个文档类型为 QuoteOfTheDay 的 Couchbase 存储库。 .该文档非常基础,只有一个 UUID 类型的 id 字段、String 类型的 va
我想过滤列表以查找具有非空属性的元素并返回该属性: list.stream.map(a -> StringUtils.trimToEmpty(a.getProp())).filter( p -> St
我需要从嵌套的List中找到一些对象。 我认为不需要类代码,因为过滤是在嵌套的 For-Each 循环 中公开的。 int value = someValue; MyObject found = nu
我想找到给定哈希值的消息。为此,我想遍历 ascii 小写字母和数字的所有可能的 n 长度排列的集合,并检查排列的哈希值是否等于给定的哈希值。 问题:预先计算集合是不可行的,因为空间复杂度是 O(36
我有一个 Array 并想对其元素执行一些匹配。 我开始知道它可以在 java 8 中以两种方式完成: String[] alphabet = new String[]{"A", "B", "C"};
我对 Java 8 中 Stream API 的 Stream#findAny() 和 Stream#findFirst() 有点困惑。 我的理解是两者都会从流中返回第一个匹配的元素,例如,当与过滤器
我是 Java 的 Stream API 的新手,我对这个案例的结果感到困惑: Stream stream = Stream.of("A","B","C","D"); System.out.print
我是一名优秀的程序员,十分优秀!