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);
}
));
我不喜欢将BitmaskcandidatesMask
放在通量之外,我请求帮助如何根据通量中稍后发生的处理过滤通量
过滤应该在调用谓词的evaluate
方法之前进行,因为该方法可能需要一些时间来计算,对于所有未引用的谓词,应该忽略该方法
如果有什么不清楚的地方,请告诉我,这样我可以提供更多细节或更新我的问题。根本不清楚您想做什么,但听起来确实像是地图缩小问题。也许有解决办法?
private boolean isReferenced(final Predicate predicate, final Bitmask candidates) {
return predicate.getBitmask().intersects(candidates);
}