为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

鸿蒙传说 2024-01-05 14:41:46
我有两个Fluxs,一个用于成功元素,另一个用于保存错误元素Flux<String> success= Flux.just("Orange", "Apple", "Banana","Grape", "Strawberry"); Flux<String> erroneous = Flux.just("Banana","Grape",);我如何过滤第一个Flux以排除第二个中的所有元素?
查看完整描述

1 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

您可能希望考虑将其收集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)))


查看完整回答
反对 回复 2024-01-05
  • 1 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信