1. Введение
В этом кратком руководстве мы представим различные способы преобразования нулевой
или пустой строки String
в пустой необязательный объект .
Получить пустой объектOption
из null
просто — мы просто используем Optional.ofNullable()
. Но что, если мы хотим, чтобы пустые String
тоже работали таким же образом?
Итак, давайте рассмотрим несколько различных вариантов преобразования пустой строки
в пустой необязательный.
2. Использование Java 8
В Java 8 мы можем использовать тот факт, что если предикат Optional#filter
не выполняется, он возвращает пустой вариант
:
@Test
public void givenEmptyString_whenFilteringOnOptional_thenEmptyOptionalIsReturned() {
String str = "";
Optional<String> opt = Optional.ofNullable(str).filter(s -> !s.isEmpty());
Assert.assertFalse(opt.isPresent());
}
И здесь нам даже не нужно проверять значение null
, так как ofNullable замкнёт
нас в случаях, когда str
равно null.
Однако создание специальной лямбды для предиката немного громоздко. Нельзя ли как-то избавиться от этого?
3. Использование Java 11
Ответ на вышеупомянутое желание на самом деле не приходит до Java 11.
В Java 11 мы по-прежнему будем использовать Optional.filter() ,
но в Java 11 представлен новый API Predicate.not()
, который позволяет легко отрицать ссылки на методы.
Итак, давайте упростим то, что мы делали ранее, используя вместо этого ссылку на метод:
@Test
public void givenEmptyString_whenFilteringOnOptionalInJava11_thenEmptyOptionalIsReturned() {
String str = "";
Optional<String> opt = Optional.ofNullable(str).filter(Predicate.not(String::isEmpty));
Assert.assertFalse(opt.isPresent());
}
4. Использование гуавы
Мы также можем использовать Guava для удовлетворения наших потребностей. Однако в этом случае мы будем использовать немного другой подход.
Вместо того, чтобы вызывать метод фильтра
для результата Optional#ofNullable
, мы сначала преобразуем пустую строку
в null
, используя String#emptyToNull
в Guava, и только затем передаем ее в Optional#ofNullable
:
@Test
public void givenEmptyString_whenPassingResultOfEmptyToNullToOfNullable_thenEmptyOptionalIsReturned() {
String str = "";
Optional<String> opt = Optional.ofNullable(Strings.emptyToNull(str));
Assert.assertFalse(opt.isPresent());
}
5. Вывод
В этой короткой статье мы рассмотрели различные способы преобразования пустой строки
в пустой вариант .
Как обычно, примеры, использованные в этой статье, можно найти в нашем проекте на GitHub .