gpt4 book ai didi

java - 从多个供应商生成一个流

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

我正在尝试使用 Java 8 Lambda/Stream API 为简单的生产者/消费者系统建模,就像:

    Stream<Sample> samplesFlow = Stream.generate(new SampleSupplier());
samplesFlow.forEach(new SampleConsumer());

我意识到“扩展”到多个消费者非常简单:

    samplesFlow
.peek(new SampleConsumer1())
.peek(new SampleConsumer2())
.forEach(new SampleConsumer3());

但是向系统添加新的生产者呢?是否有一些惯用的或“优雅”的方式来从多个无限的供应商生成流??喜欢:

Stream.generate(new SampleSupplier1(),new SampleSupplier2());  // made it up

每个供应商都模拟一个网络监听器,从远程源获取数据。

提前致谢!

最佳答案

您没有指定要如何组合提供的值。

如果你想让值交替出现,一个解决方案是:

Stream.generate(supplier1).flatMap(x->Stream.of(x, supplier2.get()))

如果你想要某种对,你可以使用

Stream.generate(()->new Pair<>(supplier1.get(), supplier2.get()))

尽管由您来编写 Pair 类,因为 jdk 不提供这样的类。 (你可以滥用 AbstractMap.SimpleEntry 但这很讨厌)。


如果你有一个有限的Stream,你可以使用Stream.concat要创建一个流,该流将在处理第二个流的项目之前处理第一个流的所有项目,但是,使用 Supplier 创建的流在默认情况下是无限的,因此您必须使用 limit在第一个流上,然后才能将其连接到另一个流,因此这不是通用解决方案。


如果你想查询每个Supplier恰好一次,你可以使用

Stream.of(supplier1, supplier2).map(Supplier::get)

不过,当然,如果您不需要对 Supplier 进行惰性求值,一个

Stream.of(supplier1.get(), supplier2.get())

也可以。

关于java - 从多个供应商生成一个流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25311535/

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