Метод map
Метод map класса Optional применяет переданную функцию
к значению, содержащемуся внутри контейнера, и возвращает новый
Optional с результатом применения этой функции. Если исходный
Optional пуст, то метод возвращает пустой Optional,
а переданная функция не вызывается. В параметр метода мы передаём
функцию-преобразователь типа Function, которая принимает
текущее значение и возвращает новое значение. Если переданная
функция вернёт null, метод обернёт результат в пустой
Optional через ofNullable.
Синтаксис
optional.map(Function<? super T, ? extends U> mapper)
Пример
Давайте преобразуем строку в её длину с помощью метода map:
import java.util.Optional;
public class Main
{
public static void main(String[] args)
{
Optional<String> opt = Optional.of("abcde");
Optional<Integer> res = opt.map(String::length);
System.out.println(res);
}
}
Результат выполнения кода:
Optional[5]
Пример
Давайте применим метод map к пустому Optional
и убедимся, что функция не вызывается:
import java.util.Optional;
public class Main
{
public static void main(String[] args)
{
Optional<String> opt = Optional.empty();
Optional<Integer> res = opt.map(String::length);
System.out.println(res);
}
}
Результат выполнения кода:
Optional.empty
Пример
Давайте преобразуем строку в верхний регистр, а затем добавим
к результату восклицательный знак, используя цепочку вызовов
map:
import java.util.Optional;
public class Main
{
public static void main(String[] args)
{
Optional<String> opt = Optional.of("abcde");
Optional<String> res = opt
.map(String::toUpperCase)
.map(s -> s + "!");
System.out.println(res);
}
}
Результат выполнения кода:
Optional[ABCDE!]
Пример
Давайте убедимся, что если функция вернёт null,
то метод map вернёт пустой Optional:
import java.util.Optional;
public class Main
{
public static void main(String[] args)
{
Optional<String> opt = Optional.of("abcde");
Optional<String> res = opt.map(s -> null);
System.out.println(res);
}
}
Результат выполнения кода:
Optional.empty