Reactor 从 List<String> 中过滤掉 Flux<String>

Reactor filter out Flux<String> from List<String>

假设我们有

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

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

对于列表或集合,这可以在非反应性世界中轻松实现,例如Subtracting one arrayList from another arrayList.

需要先将Flux转为ArrayList,然后根据Flux中有哪些元素从列表中移除元素

List<String> fluxedList = flux.collectList().block();
fluxedList.stream().forEach( elem -> list.remove(elem));

您可能希望使用 collectList() 方法。

Flux::collectList 将接受 Flux<String> 并发出 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))