1 回答

TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊
您可能希望考慮將其收集Flux到一個(gè)集合中,緩存該集合,然后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這不是最簡潔的解決方案(見下文),但它可以緩存內(nèi)容。在這個(gè)特定的例子中,這是一個(gè)沒有實(shí)際意義的問題,但如果這是一個(gè)現(xiàn)實(shí)世界的情況(不使用Flux.just()),那么erroneous可以在每個(gè)訂閱上重新計(jì)算,并且最終在性能方面可能會(huì)非常昂貴(并且不必要)。
或者,如果上述內(nèi)容在您的用例中確實(shí)并不重要,filterWhen()并且hasElement()可以更簡潔地使用,如下所示:
success.filterWhen(s -> erroneous.hasElement(s).map(x->!x))
或者使用reactor-extra:
success.filterWhen(s -> BooleanUtils.not(erroneous.hasElement(s)))
添加回答
舉報(bào)