我需要以下代码段的帮助。.raiseWorkQueueTask
应该返回通知,如果它可以找到任何null != previousPeriod.getOldId()
并且outcomeCode
的{{1}}为“ L3 “ ....但是我在
riseWorkQueue
我收到一个错误消息,说*.ifPresent(()->proceedWorkQueue(ip)).orElse(null);*
..我也尝试了其他变体...
"Cannot infer functional interface"
.ifPresent(()->proceedWorkQueue(ip).orElse(null));
.ifPresent(proceedWorkQueue(ip).orElse(null));
答案 0 :(得分:1)
您可能正在寻找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));
}
答案 1 :(得分:0)
ifPresent
是一个void方法,用于处理可选参数的最终值。但是,您收到的错误是由于您传递的lambda与预期功能接口的签名不匹配而引起的。应该是:
//the lambda must take 1 parameter, even if you don't use it
.ifPresent(period -> proceedWorkQueue(ip))
如果您需要仅运行proceedWorkQueue(ip)
(如果可选参数具有值),则可以调用map
(有点作弊):
return ip.getPreviousPeriods().stream()
.filter(previousPeriod -> null != previousPeriod.getOldId())
.findAny()
.map(period ->{proceedWorkQueue(ip); return period;});
或使用if
块以可读的方式编写它:
Optional<Notification> value = ip.getPreviousPeriods().stream()
.filter(previousPeriod -> null != previousPeriod.getOldId())
.findAny();
if(value.isPresent()) {
proceedWorkQueue(ip);
}
return value;