Java 基于先前元件处理的过滤器流量

Java 基于先前元件处理的过滤器流量,java,reactive-programming,project-reactor,Java,Reactive Programming,Project Reactor,我有以下代码,我希望重构这些代码,以避免将外部位掩码candidatesMask用于过滤器调用 位掩码是Java位集的自定义扩展,提供了两种实用方法 谓词是一个本身包含位掩码的类 方法isReferenced从通量中过滤谓词,检查谓词的位掩码是否与candidatesMask相交(如果它们都在基础位集中的相同位置设置了位,则为true) 对于通量中的每个谓词,将调用其方法evaluate,返回一个Mono。根据此调用的结果,调用方法methodUpdateCandidatesMask,该方法修改

我有以下代码,我希望重构这些代码,以避免将外部位掩码
candidatesMask
用于过滤器调用

位掩码
是Java位集的自定义扩展,提供了两种实用方法

谓词
是一个本身包含位掩码的类

方法
isReferenced
从通量中过滤谓词,检查谓词的位掩码是否与
candidatesMask
相交(如果它们都在基础位集中的相同位置设置了位,则为true)

对于通量中的每个谓词,将调用其方法
evaluate
,返回一个
Mono
。根据此调用的结果,调用方法
methodUpdateCandidatesMask
,该方法修改位掩码
candidatesMask
(将特定位设置为0)

这会导致将来的谓词从流量中过滤掉

方法
getObjectBasedOnResult
只是一个占位符,将布尔值
evaluationResult
映射到
对象

        Bitmask candidatesMask = new Bitmask();
        List<Predicate> predicates = getPredicates();
        
        Flux<Object> booleanFlux = Flux.fromIterable(predicates)
                .filter(predicate -> isReferenced(predicate, candidatesMask))
                .concatMap(predicate -> predicate.evaluate() // returns Mono<Boolean>
                        .map(evaluationResult -> {
                                    // this call updates candidates mask effecting filter() result of future flux elements
                                    methodUpdatingCandidatesMask(evaluationResult);
                                    return getObjectBasedOnResult(evaluationResult);
                                }
                        ));
我不喜欢将Bitmask
candidatesMask
放在通量之外,我请求帮助如何根据通量中稍后发生的处理过滤通量

过滤应该在调用谓词的
evaluate
方法之前进行,因为该方法可能需要一些时间来计算,对于所有未引用的谓词,应该忽略该方法


如果有什么不清楚的地方,请告诉我,这样我可以提供更多细节或更新我的问题。

根本不清楚您想做什么,但听起来确实像是地图缩小问题。也许有解决办法?
    private boolean isReferenced(final Predicate predicate, final Bitmask candidates) {
        return predicate.getBitmask().intersects(candidates);
    }