project-reactor - 将通量发射与重复合并?
问题描述
我有一个Flux
发出项目的:
data class Item(
val isEgg: Boolean,
val isBasket: Boolean
)
考虑 2 个“篮子”和 4 个“鸡蛋”排放。我想将这些排放量合并为两个:每个包含一个“篮子”和 4 个“鸡蛋”:
有人知道这种转变吗?通量是有限的,不应超过 1K 项。
编辑:
到目前为止我所取得的成就 - 我将排放量归为GroupedFlux
. 现在我需要将GroupedFlux
包含Basket1
,Basket2
与第二个包含“鸡蛋”结合起来,以便生产两个篮子,每个篮子都有“重复”的鸡蛋。
val flux = Flux.just("Egg1", "Egg2", "Basket1", "Egg3", "Egg4", "Basket2")
val block = flux.groupBy {
it.startsWith("Egg")
}
所需通量:Flux.just("Basket1(Egg1,Egg2, Egg3, Egg4)","Basket2(Egg1,Egg2, Egg3, Egg4)")
解决方案
flatMap
您可以使用and实现此结果reduce
:
void combine() {
Flux<String> flux =
Flux.just("Egg1", "Egg2", "Basket1", "Egg3", "Egg4", "Basket2");
Flux<String> eggs = flux.filter(str -> str.startsWith("Egg"));
Flux<String> basketNames = flux.filter(str -> str.startsWith("Basket"));
basketNames.flatMap(basketName -> eggs.reduce(
new Basket(basketName),
(basket, egg) -> {
basket.add(egg);
return basket;
})
);
}
class Basket {
private final String name;
private final List<String> eggs;
Basket(final String name) {
this.name = name;
this.eggs = new ArrayList<>();
}
public void add(String egg) {
eggs.add(egg);
}
}
推荐阅读
- javascript - 性能:Html5 Canvas / Javascript - 使用 canvas.drawImage 与 canvas.style 移动背景图像
- javascript - 我应该在 Angular 的可重用组件中使用 EventEmitter 还是共享服务?
- ios - 为什么 UITableView 内容偏移量为-20.0?
- bluetooth-lowenergy - 未使用 Tmds.Dbus 库获取 BLE 客户端连接通知
- asp.net - 请求超时。Web 服务器未能在指定时间内响应
- git - Jenkins master 如何与我在 Kubernetes 中的自定义容器通信?
- pivot-table - SSAS 查找日期小于或等于选定日期的数据
- javascript - 在 React 的 TextField 中无法识别新行 '\n'
- c# - 覆盖 XML 文件中的数据
- php - 在 Wordpress 中显示来自第二个数据库的文章