Как использовать Java Необязательно, без условия, чтобы добавить другую логику - PullRequest
2 голосов
/ 11 марта 2020

Я хочу применить разные логики c к дополнительному значению, как показано ниже

Optional<String> alarm = getAlarm();
if (alarm.isPresent()) {
    testAutoStopAndRollback(alarm.get());
} else {
    testWithoutAutoStopAndRollback();
}

Есть ли более краткий способ реализовать те же логики c? Я знаю, что могу переместить половину логи c в ifPresent()

alarm.ifPresent(name -> testAutoStopAndRollback(name));

Как я могу сделать остальную часть?

Чтобы прояснить вопрос, мой код придерживается Java 8, поэтому я не смогу использовать ifPresentOrElse in Java 9.

Ответы [ 2 ]

3 голосов
/ 11 марта 2020

Я чувствую, что ваш первый пример уже в порядке. Если вы не можете обновить до Java 9, Необязательно не содержит такой метод, как ifPresentOrElse. Просто придерживайтесь первого правила программирования: «Если это работает, не трогайте его!» :)

Если вы хотите создать больше классов, чтобы немного очистить свой код, проверьте этот вопрос .

2 голосов
/ 11 марта 2020

Один из способов сделать это, вернув некоторое значение из testAutoStopAndRollback и testWithoutAutoStopAndRollback, например, я бы возвратил логические значения, чтобы определить, присутствует или нет значение

testAutoStopAndRollback(val) ---> returns true
testWithoutAutoStopAndRollback ---> returns false

И затем использовать Optional

boolean value = alarm.map(this::testAutoStopAndRollback).orElseGet(this::testWithoutAutoStopAndRollback);
...