Reactor 从 List<String> 中过滤掉 Flux<String>
Reactor filter out Flux<String> from List<String>
假设我们有
List<String> list
包含 "A", "B", "C", "D"
Flux<String> flux
包含 "A", "B"
有没有办法从列表中过滤掉通量?换句话说,从列表中减去通量,结果应该是 "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))
假设我们有
List<String> list
包含"A", "B", "C", "D"
Flux<String> flux
包含"A", "B"
有没有办法从列表中过滤掉通量?换句话说,从列表中减去通量,结果应该是 "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))