Java 如果你在场,就把东西还给我
我需要一些关于以下代码片段的帮助<如果可以找到任何Java 如果你在场,就把东西还给我,java,java-8,java-stream,optional,Java,Java 8,Java Stream,Optional,我需要一些关于以下代码片段的帮助null!=previousPeriod.getOldId()) .findAny() .ifPresent(()->proceedWorkQueue(ip)) .orElse(空); } 私有可选进程工作队列(Ip){ EntryParametersTo EntryParametersTo=新的EntryParametersTo(); 保险=ip.getInsurance(); //..... 返回queueClient.riseWorkQueue(entryP
null!=前面的period.getOldId()
和riseWorkQueue
的outcomeCode
是“L3”。。。。但是我在
*.ifPresent(()->proceedWorkQueue(ip)).orElse(null);*
我收到一个错误,说“无法推断功能接口”
。。我还尝试了其他的变化
.ifPresent(()->proceedWorkQueue(ip).orElse(null));
.ifPresent(proceedWorkQueue(ip).orElse(null));
private可选riseWorkQueueTask(IP){
返回ip.getPreviousPeriods().stream()
.filter(previousPeriod->null!=previousPeriod.getOldId())
.findAny()
.ifPresent(()->proceedWorkQueue(ip))
.orElse(空);
}
私有可选进程工作队列(Ip){
EntryParametersTo EntryParametersTo=新的EntryParametersTo();
保险=ip.getInsurance();
//.....
返回queueClient.riseWorkQueue(entryParametersDTO)
.filter(w->w.getStateDTO()!=null)
.filter(w->stateContents.L3.equalsIgnoreCase(
w、 getStateDTO().getOutcomeCode())
.flatMap(标志->从数据库检索通知(保险));
}
ifPresent
是一种无效方法,用于处理可选项的最终值。但是您得到的错误是由于您传递的lambda与预期函数接口的签名不匹配。应该是:
//the lambda must take 1 parameter, even if you don't use it
.ifPresent(period -> proceedWorkQueue(ip))
如果需要运行proceedWorkQueue(ip)
如果可选项有值,则可以调用map
(一种欺骗):
或者使用if
块以可读的方式写入:
Optional<Notification> value = ip.getPreviousPeriods().stream()
.filter(previousPeriod -> null != previousPeriod.getOldId())
.findAny();
if(value.isPresent()) {
proceedWorkQueue(ip);
}
return value;
可选值=ip.getPreviousPeriods().stream()
.filter(previousPeriod->null!=previousPeriod.getOldId())
.findAny();
if(value.isPresent()){
进程工作队列(ip);
}
返回值;
您可能正在寻找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
}
private Optional<Notification> riseWorkQueueTask(IP ip) {
return ip.getPreviousPeriods().stream()
.filter(previousPeriod -> null != previousPeriod.getOldId())
.findAny()
.flatMap(i -> proceedWorkQueue(i));
}
我不是很确定,但问题可能是(部分
.ifPresent(()->proceedWorkQueue(ip))
)如果在过滤器
之后存在任何这样的ip,将其映射到另一个方法响应。另外,签名可选返回null
也没有什么意义。@nullpointer这是对null返回值的一个很好的观察。我会解决的。但我不太清楚目的是什么,所以这更多的是关于编译错误。谢谢注意:如果您打算返回null
而不是Optional
,这将是对Optional的滥用,而不是。如果我大致正确地理解了这个问题,那么第二个代码片段是正确的。可能是最后一行中的.flatMap(p->proceedWorkQueue(ip))
使用传递到方法中的ip
。ip
和ip
是两个不同的类/类型吗?非常混乱。还是打字错误?
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
}
private Optional<Notification> riseWorkQueueTask(IP ip) {
return ip.getPreviousPeriods().stream()
.filter(previousPeriod -> null != previousPeriod.getOldId())
.findAny()
.flatMap(i -> proceedWorkQueue(i));
}