gpt4 book ai didi

java - 使用 peek 和 findAny 对 Java Stream 结果感到困惑

转载 作者:搜寻专家 更新时间:2023-11-01 01:39:41 25 4
gpt4 key购买 nike

我是 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 empty Optional 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 in count()), 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com