首页 > 解决方案 > 反应器过滤掉通量来自列表

问题描述

假设我们有

有没有办法从列表中过滤掉通量?换句话说,从列表中减去通量,结果应该是"C", "D"

查看reactor的文档,filterWhen似乎是最接近的,但它只重播第一个匹配条件的元素,所有后续匹配都将被忽略。

对于 List 或 Collections,这可以在非反应性世界中轻松实现,例如从另一个 arrayList 中减去一个 arrayList

标签: javaspring-webfluxproject-reactor

解决方案


您可能正在寻找使用该collectList()方法。

Flux::collectList将采用 aFlux<String>并发出 a Mono<List<String>>

这将使您能够方便地运行在该数据集上运行所需的任何集合比较操作。

有了它,您可以提供一个.map()操作并将其转换为您想要的结果。

Mono<List<String>> monoWithRemovedElements = flux.collectList()
    .map(fluxTurnedIntoList -> /*(subtract array list)*/)

如果您想将其扇出到 Flux 中,您可以使用该Mono::flatMapMany方法。

Flux<String> fluxWithRemovedElements = monoWithRemovedElements 
   .flatMapMany(list -> Flux.fromIterable(list))

推荐阅读