Как мне сделать что-то, если необязательный <String>отсутствует или присутствует, но пустая строка? - PullRequest
0 голосов
/ 14 февраля 2019

Кажется, я не могу найти более краткий способ сделать это

Optional<String> foo;
if (!foo.isPresent() || StringUtils.isBlank(foo.get())) {
  // ...
}

Это так, но на самом деле логика становится более запутанной, ИМО:

Optional<String> foo;
if (!foo.filter(StringUtils::isNotBlank).isPresent()) {
  // ...
}

Чувствуюкак будто я упускаю что-то действительно очевидное.

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

Вы можете использовать Optional#orElse() для подстановки пустой строки, если строка не существует, тогда используйте StringUtils.isBlank() для результата:

Optional<String> foo;

if (StringUtils.isBlank(foo.orElse(""))) {
    // ...
}
0 голосов
/ 14 февраля 2019

Может быть, это то, что вы ищете.

Optional.of("")
        .filter(not(String::isBlank)))
        .orElseThrow(() -> new MyException("..."));

Вы найдете not в Predicate.

Очевидно, что это менее эффективно, чем if утверждение, но оно имеет свое место.

Ах, хорошо, после вашего комментария это становится более понятным.Используйте orElseThrow.

0 голосов
/ 14 февраля 2019

В Java 11 вы можете использовать Predicate#not, Optional#isEmpty и String#isBlank, чтобы быть более кратким:

Optional<String> foo = ...;

if (foo.filter(not(String::isBlank)).isEmpty()) {
    // ...
}

Тело оператора if будет введено, только если fooуже пустой или String, который содержит foo, является пустым String.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...