java8再检查一次可选的null值

时间:2019-04-04 02:25:31

标签: java java-8 optional

如何在1行中用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;

2 个答案:

答案 0 :(得分:3)

类似

Date payDate =  mapOfIntAndListOfObjects.getOrDefault(spn, Collections.emptyList())
        .stream()
        .findFirst()
        .orElse(new MyObject())
        .getPayDate();
logger.info("paydate {} ", paydate);
return payDate;

您似乎实际上并不需要将它们包装在Optional周围。

答案 1 :(得分:1)

尝试一下:

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

完全按预期使用Optional功能。即在任何地方都不需要默认列表/值(除了在找不到任何内容时选择返回的内容)。