首页 > 解决方案 > ifPresent 返回一些东西 orElse

问题描述

我需要以下代码片段的帮助..raiseWorkQueueTask如果它可以找到任何通知null != previousPeriod.getOldId()并且outcomeCoderiseWorkQueue“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));
}

标签: javajava-8java-streamoptional

解决方案


您可能正在寻找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));
}

推荐阅读