gpt4 book ai didi

java - 懒惰地与供应商创建java流

转载 作者:行者123 更新时间:2023-11-29 04:18:56 24 4
gpt4 key购买 nike

是否有可能使用 Java 8 流 API 创建直到需要时才评估的流?

我是说。

我有一个处理元素列表的流,在其中一个中间操作(映射)中,我必须读取另一个流,我希望将该流放在另一个变量中,以供所有其他第一个流对象使用,但如果没有要处理的对象,我想避免处理第二个流。

我认为用代码检查更容易:

Message[] process(@Nullable Message[] messages) {
Stream<Function> transformationsToApply =
transformations
.stream()
.filter(transformation -> transformationIsEnabled(transformation.getLeft()))
.map(Pair::getRight);

return Arrays.stream(messages != null ? messages : new Message[0])
.filter(Objects::nonNull)
.map(agentMessage -> {
transformationsToApply.forEach(transformation -> processMessage(transformation, agentMessage));
return agentMessage;
})
.toArray(Message[]::new);
}

我怀疑第一个流生成,我想根据我处理的列表返回流,但我只想在要使用它时这样做(并且对所有消息元素使用相同的)。

任何想法..?

最佳答案

别担心,在您附加 terminal operation 之前,您的 transformationsToApply 不会被评估.

Intermediate operations return a new stream. They are always lazy; executing an intermediate operation such as filter() does not actually perform any filtering, but instead creates a new stream that, when traversed, contains the elements of the initial stream that match the given predicate. Traversal of the pipeline source does not begin until the terminal operation of the pipeline is executed.

关于java - 懒惰地与供应商创建java流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50466096/

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