java8多次检查可选的空值

java8多次检查可选的空值,java,java-8,optional,Java,Java 8,Optional,如何用java8在一行中编写这个 if (Optional.ofNullable(mapOfIntAndListOfObjects.get(spn)).isPresent()) { Date paydate = Optional.ofNullable(mapOfIntAndListOfObjects.get(spn).stream().findFirst()).get().orElse(new MyObject()).getPayDate(); logger.info("payd

如何用java8在一行中编写这个

if (Optional.ofNullable(mapOfIntAndListOfObjects.get(spn)).isPresent()) {
    Date paydate = Optional.ofNullable(mapOfIntAndListOfObjects.get(spn).stream().findFirst()).get().orElse(new MyObject()).getPayDate();
    logger.info("paydate {} ", paydate);
    return paydate;
} 
return null;
差不多

Date payDate =  mapOfIntAndListOfObjects.getOrDefault(spn, Collections.emptyList())
        .stream()
        .findFirst()
        .orElse(new MyObject())
        .getPayDate();
logger.info("paydate {} ", paydate);
return payDate;
你似乎真的不需要把它们包装成可选的

Date payDate =  mapOfIntAndListOfObjects.getOrDefault(spn, Collections.emptyList())
        .stream()
        .findFirst()
        .orElse(new MyObject())
        .getPayDate();
logger.info("paydate {} ", paydate);
return payDate;
您似乎真的不需要将它们包装成可选的。

尝试以下方法:

return Optional.ofNullable(mapOfIntAndListOfObjects.getOrDefault(spn))
  .map(List::stream)
  .map(Stream::findFirst)
  .map(MyObject::getPayDate)
  .orElse(null); // or whatever default to return in case nothing found
完全按照预期使用可选功能。ie在任何地方都不需要默认列表/值,除非选择在未找到任何内容时返回的内容。

尝试以下操作:

return Optional.ofNullable(mapOfIntAndListOfObjects.getOrDefault(spn))
  .map(List::stream)
  .map(Stream::findFirst)
  .map(MyObject::getPayDate)
  .orElse(null); // or whatever default to return in case nothing found

完全按照预期使用可选功能。ie任何地方都不需要默认列表/值,只需要选择在找不到任何内容时返回的内容。

Perfect getOrDefaultspn,new ArrayList这就是我要找的:不需要分配新的ArrayList;使用getOrDefaultspn,集合。emptyList@Holger事实上,假设我的答案是正确的,就不需要使用任何一个;使用getOrDefaultspn,集合。emptyList@Holger实际上,假设我的答案是正确的,就不需要使用这两种方法。您应该只使用Optional作为方法的返回类型。使用Optional替换if-else语句会滥用意图,降低代码的可读性,并添加完全不必要的对象分配。您应该只将Optional用作方法的返回类型。使用Optional替换if-else语句会滥用意图,降低代码的可读性,并添加完全不必要的对象分配。接受2个参数。接受2个参数。