java Необязательно: хороший способ не делать вложенные ifPresent () - PullRequest
0 голосов
/ 01 марта 2019

Мне часто приходится что-то делать, как показано ниже

// some method
public T blah() {
    Optional<T> oneOp = getFromSomething();
    if (oneOp.isPresent()) {
        Optional<T> secondOp = getFromSomethingElse(oneOp.get())
        if (secondOp.isPresent()) {
            return secondOp.get()
        }
    }
    return DEFAULT_VALUE;
}

довольно громоздко продолжать проверять ifPresent (), как будто я вернулся к выполнению нулевой проверки

1 Ответ

0 голосов
/ 01 марта 2019

Используйте метод flatMap , который, если присутствует, заменит Optional другим Optional, используя прилагаемый Function.

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

Затем вы можете использовать orElse, который, если присутствует, вернет значение или значение по умолчанию, которое вы указали.

Если значение присутствует, возвращает значение, в противном случае возвращается other.

Здесь я также превратил вызов getFromSomethingElse в ссылку на метод, который будет соответствовать Function, требуемому flatMap.

public T blah() {
    return getFromSomething().flatMap(this::getFromSomethingElse).orElse(DEFAULT_VALUE);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...