我用Reactor写了如下代码
private Mono<Map<String, A>> resolve(Mono<Map<String, List<B>>> bMapMono) {
return bMapMono.flatMap(bMap -> bMap.entrySet().stream()
.map(entry -> toAfunc(entry.getKey(), entry.getValue()))
.filter(Objects::nonNull)
.collect(Collectors.<A, String, A>toMap(x -> x.getStringKey(), Function.identity())));
}
但在编译器智能中显示错误
像这样
Required type: Mono <Map<String, A>>
Provided: Mono <Object>
我该如何解决这个问题?
2条答案
按热度按时间kkbh8khc1#
我可以在IntelliJ中重现这个错误。看起来好像Mono::flatMap中的lambda返回了一个Map,而你想要返回的是一个Mono。虽然你可以通过将lambda结果 Package 在一个mono中来解决这个问题,但你可能需要考虑使用reactor方法,它支持你可能试图用流实现的目标。考虑以下内容:
xwbd5t1u2#
编译器似乎无法推断Collectors.toMap操作结果的正确类型。要解决此问题,可以显式指定返回Map的类型
在此代码中,HashMap::new用于创建HashMap的新示例,该示例用作Collectors.toMap操作的结果。
这应该可以解决这个问题,并允许编译器正确地推断返回的Mono的类型。