gpt4 book ai didi

java - Java流中map().map()的执行顺序

转载 作者:行者123 更新时间:2023-12-03 08:35:19 25 4
gpt4 key购买 nike

我使用以下代码(简化):
主要:

Foe[] foe = Stream.of(foe_2).map(Mapper_1).map(Mapper_2).toArray(Foe::new);

在 Mapper_1 中:

{
System.out.println("Mapper_1");
do stuff
}

在Mapper_2中:

{
System.out.println("Mapper_2");
do other stuff
}

我需要在 Mapper_2 开始之前完成 Mapper_1。
Mapper_1和Mapper_2调用的函数不互相调用!

我的期望:
Mapper_1 映射 Stream.of(foe_2) 返回的流的所有元素,然后 Mapper_2 映射到输出数组,从而产生以下输出:

Mapper_1  
...
Mapper_1
Mapper_2
...
Mapper_2

持续发生的情况:
Mapper_1 映射 Stream.of(foe_2) 的第一个元素,紧接着,Mapper_2 获取第一个结果并将其映射,准备好放入输出数组中,然后 Mapper_1 映射第二个元素,结果在此输出中:

Mapper_1  
Mapper_2
NullpointerExcpetion

我收到异常,因为 Mapper_1 没有映射所有元素并且数据结构困惑。

这是正常行为,对我来说违反直觉,还是我错过了什么?

最佳答案

Streams 一次处理 1 个元素,因此您所看到的行为实际上是 JDK 规范所要求的。

要通过映射器 1 处理所有元素,然后通过映射器 2 处理所有元素,您需要一个接一个的 2 个流,并且需要在将元素传递到第二个流之前收集中间的第一个流.

但别担心;你可以用一行来表达:

Foe[] foe = Stream.of(foe_2)
.map(Mapper_1)
.collect(toList()).stream()
.map(Mapper_2)
.toArray(Foe::new)

关于java - Java流中map().map()的执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63981197/

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