gpt4 book ai didi

Java 8 Stream中间操作-元素处理

转载 作者:行者123 更新时间:2023-12-02 10:58:51 34 4
gpt4 key购买 nike

Java 8 Stream API ,诸如 filtermappeek 等中间操作的描述被提到为

...elements of this stream...

但是,像 filter 这样的流中间操作似乎一次处理并返回一个单独的“元素”。例如,Java 8 stream operations execution order问题(参见输出)和答案。

filter的API说明为

Returns a stream consisting of the elements of this stream that match the given predicate.

但是,Java 8 stream operations execution order中提到的代码问题似乎一次处理并返回一个单独的元素。请澄清 API 提及的“元素”与代码中单个“元素”的明显处理之间的脱节。

谢谢。

最佳答案

是的,无状态中间操作(例如 filtermap 等)一次处理给定的元素,前者要么将其发送到下一个元素,要么不将其发送到下一个元素。 stage,其中下一个阶段是流管道中的后续中间操作。后者总是会在调用映射函数后将元素发送到后续操作。

例如:

...
.filter(n -> n % 2 == 0) // retain even numbers
.map(n -> n * n) // square it
...

一次一个元素将通过 filter 操作,如果当前元素满足提供的谓词,则会将其传递给 map 操作。

我认为你理解这部分,但你的困惑是为什么在java文档中这么写:

Returns a stream consisting of the elements of this stream that match the given predicate.

“返回一个流”,因为每个中间操作都会返回一个新流。

“由元素组成”,因为流表示元素序列,并且在大多数情况下,有多个元素通过给定的中间操作。

这听起来像是流存储其元素,但事实并非如此。相反,它们可能存储在某些底层集合中或按需生成。

<小时/>

值得注意的是,并非每个中间操作都会一次将一个元素传递到下一阶段。例如,sorted 中间操作会缓冲所有元素,直到看到输入末尾,然后将数据发送到后续阶段。

<小时/>

作为阅读,有一篇精彩的帖子,作者:Brian Goetz关于Streams under the hood 。这确实涉及到有关流的详细信息,并且有一个很好的动画由 Tagir Valeev 提供。展示了如何可视化流。

关于Java 8 Stream中间操作-元素处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49588362/

34 4 0