java8 проверяет необязательное значение null более одного раза - PullRequest
1 голос
/ 04 апреля 2019

Как мне написать это в java8 в 1 строку?

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 ]

3 голосов
/ 04 апреля 2019

Что-то вроде

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

Кажется, вам не нужно оборачивать их вокруг Optional.

1 голос
/ 04 апреля 2019

Попробуйте:

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, как и предполагалось.т.е. никакие списки / значения по умолчанию не нужны нигде (кроме выбора того, что возвращать, когда ничего не найдено).

...