java - ifPresent 返回一些东西 orElse
问题描述
我需要以下代码片段的帮助..raiseWorkQueueTask
如果它可以找到任何通知null != previousPeriod.getOldId()
并且outcomeCode
是riseWorkQueue
“L3”..应该返回通知....但我收到一个错误
*.ifPresent(()->proceedWorkQueue(ip)).orElse(null);*
我收到一条错误消息"Cannot infer functional interface"
……我还尝试了其他变体……
.ifPresent(()->proceedWorkQueue(ip).orElse(null));
.ifPresent(proceedWorkQueue(ip).orElse(null));
private Optional<Notification> riseWorkQueueTask(IP ip) {
return ip.getPreviousPeriods().stream()
.filter(previousPeriod -> null != previousPeriod.getOldId())
.findAny()
.ifPresent(() -> proceedWorkQueue(ip))
.orElse(null);
}
private Optional<Notification> proceedWorkQueue(Ip ip) {
EntryParametersDTO entryParametersDTO = new EntryParametersDTO();
Insurance insurance = ip.getInsurance();
//.....
return queueClient.riseWorkQueue(entryParametersDTO)
.filter(w -> w.getStateDTO() != null)
.filter(w -> StateConstants.L3.equalsIgnoreCase(
w.getStateDTO().getOutcomeCode()))
.flatMap(flag -> retrieveNotificationFromDB(insurance));
}
解决方案
您可能正在寻找map
:
private Optional<Notification> riseWorkQueueTask(IP ip) {
return ip.getPreviousPeriods().stream()
.filter(previousPeriod -> null != previousPeriod.getOldId())
.findAny()
.map(i -> proceedWorkQueue(i).orElse(null));
// orElse if 'proceedWorkQueue' returns empty Optional
}
或者更确切地说,简单地flatMap
用作:
private Optional<Notification> riseWorkQueueTask(IP ip) {
return ip.getPreviousPeriods().stream()
.filter(previousPeriod -> null != previousPeriod.getOldId())
.findAny()
.flatMap(i -> proceedWorkQueue(i));
}
推荐阅读
- android - 在 tablayout 片段之间进行通信
- tensor - GAM 包中的张量积 ti() 给出不正确的结果
- javascript - 如何将数据发布到 JsonPlaceholder 假服务器?
- ajax - Ajax 错误 500:检测到循环引用
- android - 执行颤振应用程序时出错
- c - 在 SPI STM32 中读取 Rx 缓冲区的问题
- angularjs - 如何使用 ag-grid 在多列中创建 OR 逻辑过滤器
- c# - C# Dictionary 获取具有相同值的所有键
- java - CompletableFuture.supplyAsync 代码的代码覆盖率
- java - 搜索字谜时,有没有办法保持单词的大写和小写?