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));
}