Перейти к основному содержимому

Преобразование пустой строки в пустой необязательный параметр

· 2 мин. чтения

Задача: Наибольшая подстрока без повторений

Для заданной строки s, найдите длину наибольшей подстроки без повторяющихся символов. Подстрока — это непрерывная непустая последовательность символов внутри строки...

ANDROMEDA 42

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 .