我有兩個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)))
添加回答
舉報
0/150
提交
取消