Java 8 вложенная проверка нуля и доступ к первому элементу - PullRequest
1 голос
/ 06 мая 2020

Как я могу преобразовать приведенный ниже устаревший код java для использования Необязательно:

if (outer != null
        && outer.getInnerMethod() != null
        && outer.getInnerMethod().isAllowed()) {
   Obj value = outer.getInnerMethod().getSomethingElse();
}

Использование чего-то вроде Optional.ofNullable привело меня к этому -

Optional.ofNullable(Outer.getOuter)
        .map(Outer::getInnerMethod)
        .map(SomethingElse::isAllowed)
        .ifPresent(.. );

Но ifPresent будет не иметь доступа к внешнему объекту. Как лучше всего преобразовать нечто подобное?

Ответы [ 3 ]

2 голосов
/ 06 мая 2020

Сделайте это

Optional.ofNullable(Outer.getOuter)
        .filter(outer -> ::Objects.nonNull(outer.getInnerMethod()))
        .filter(SomethingElse::isAllowed)
        .map (.. ); //or whatever operation you want to do here
1 голос
/ 06 мая 2020

Вместо использования карты для проверки, если это разрешено, используйте filter(e -> e.isAllowed()), это отфильтрует все, что запрещено.

1 голос
/ 06 мая 2020

Используйте filter вместо map. Из java do c

Если значение присутствует и значение соответствует заданному предикату, вернуть Optional, описывающий значение, в противном случае вернуть пустой Необязательно.

Optional<Obj> optional = Optional.ofNullable(Outer.getOuter)
    .map(Outer::getInnerMethod)
    .filter(SomethingElse::isAllowed)
    .map(SomethingElse::getSomethingElse);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...