gpt4 book ai didi

java - 如何从另一个 Flux 中排除 Flux 中的所有元素

转载 作者:行者123 更新时间:2023-11-30 07:39:58 27 4
gpt4 key购买 nike

我有两个 Flux,一个用于成功元素,另一个用于保存错误元素

Flux<String> success= Flux.just("Orange", "Apple", "Banana","Grape", "Strawberry");
Flux<String> erroneous = Flux.just("Banana","Grape",);

我如何过滤第一个 Flux 以排除第二个中的所有元素?

最佳答案

您可能希望考虑将 Flux 收集到一个集合中,缓存该集合,然后按如下方式使用 filterWhen:

Mono<Set<String>> erroneousSet = erroneous.collect(Collectors.toSet()).cache();
Flux<String> filtered = success.filterWhen(v -> erroneousSet.map(s -> !s.contains(v)));

给予:

Orange
Apple
Strawberry

这不是最简洁的解决方案(见下文),但它可以缓存 erroneous 的内容。在这个具体示例中,这是一个有争议的问题,但如果它是真实世界的情况(不使用 Flux.just()),则可以在每个订阅上重新计算 erroneous,并且这最终可能会在性能方面变得难以置信(并且不必要地)昂贵。

或者,如果以上内容在您的用例中真的无关紧要,filterWhen()hasElement() 可以更简洁地使用,如下所示:

success.filterWhen(s -> erroneous.hasElement(s).map(x->!x))

或者使用 reactor-extra:

success.filterWhen(s -> BooleanUtils.not(erroneous.hasElement(s)))

关于java - 如何从另一个 Flux 中排除 Flux 中的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58606601/

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