java-8 - Mono 类型中的方法 flatMap()不适用于参数 ((上一页)->{})
问题描述
我收到此错误: Mono 类型中的方法 flatMap() 不适用于参数 (( prev)->{})
public Mono<PortCall> updateByFindById(String gsisKey, PortCall portCall) {
PortCall next = portCallRepository.findById(portCall.getNextPortCall().getNextScheduleEntryKey()).toProcessor().block();
return portCallRepository.findById(gsisKey)
.switchIfEmpty(Mono
.error(new DataNotFoundException(HttpStatus.NOT_FOUND, PortCallConstants.PORT_CALL_NOT_FOUND)))
.flatMap(retrivedPortCall -> {
PortCall prev1 = portCallRepository.findById(retrivedPortCall.getPreviousPortCall()
.getPreviousScheduleEntryKey()).flatMap(prev->{
prev.setNextSiteCode("");
prev.getNextPortCall().setNextScheduleEntryKey(next.getGsisKey());
prev.getNextPortCall().setTerminalCode(next.getSiteRkstCode());
prev.getNextPortCall().setCityCode(next.getCityCode());
prev.getNextPortCall().setCityName(next.getCity());
prev.getNextPortCall().setTerminalName(next.getSiteName());
prev.getNextPortCall().setArrivalVoyage(next.getArrivalVoyageCode());
prev.getNextPortCall().setDepartureVoyage(next.getDepartureVoyageCode());
portCallRepository.save(prev);
});
解决方案
该表达式(( prev)->{})
表示您没有在 flatmap 调用中使用 lambda 实现返回任何内容,而 flatmap 合约期望? super Optional<U>
应该返回。
正如Toerktumlare建议的那样,portCallRepository.save(prev);
应该返回一个 Optional,如果返回一个具体值,请尝试使用map
而不是返回,或者如果没有返回,请添加一个 return 语句。
推荐阅读
- java - 通过 Logback 记录到 App Engine request_log
- oracle - R2DBC - Oracle 数据库支持
- java - 流如何在内部处理数据?
- angular - 从Angular8中的链接中删除Html编码字符
- cmake - CMake set_property() 似乎不适用于源文件
- javascript - PinchZoom.js 与 iOS 设备上的 Owl Carousel 不兼容
- c# - jqGrid 树网格版本 4.5.2 无法让树工作
- angular - MAT_DATEPICKER_VALIDATORS 的错误代码是什么?
- sql-server - Docker 上 SQLserver 中 FILESTREAM 功能的替代方案
- javascript - Fabric.js loadFromJSON 将对象分配给未正确转换的自定义属性