Spring WebFlux中使用flatMap出现编译错误求助
解决Mono flatMap编译错误问题
错误原因分析
你的代码存在三个核心问题,导致了编译错误:
- 不必要的Mono嵌套:用
Mono.just()包裹customRefFlux.collectList()的处理结果,最终会得到Mono<Mono<Boolean>>,但方法声明返回的是Mono<Boolean>,类型不匹配。 - flatMap误用:
flatMap用于将当前Mono转换为另一个异步Mono流,但这里只是对List做同步的匹配判断,不需要异步操作,应该用map。 - Lambda无返回值:你的flatMap参数里的lambda执行了
anyMatch但没有返回结果,不符合Function接口的要求(必须返回对应类型的值)。
修正后的代码
public Mono<Boolean> isMandatory(String country, String compliance,String referenceType) { Flux<CustomReference> customRefFlux = getCustomsReferenceRule(); // 直接对collectList()的结果用map做同步处理,返回布尔值 return customRefFlux.collectList().map(customRefList -> customRefList.stream().anyMatch(customRef -> customRef.getType().equalsIgnoreCase(referenceType) ) ); }
额外优化建议
其实不需要先把Flux转成List再判断,可以直接在Flux上操作,效率更高:
public Mono<Boolean> isMandatory(String country, String compliance,String referenceType) { return getCustomsReferenceRule() .any(customRef -> customRef.getType().equalsIgnoreCase(referenceType)); }
Flux的any()方法会直接判断流中是否存在匹配的元素,内部已经做了优化,不需要手动收集成List再处理。
内容的提问来源于stack exchange,提问作者Mira Devi
相关产品推荐
相关产品推荐

