РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
556 of 1163 menu

Метод flatMap

Метод flatMap класса Optional применяет к значению функцию-преобразователь, которая возвращает другой Optional, и сразу разворачивает результат. Если исходный Optional пуст, метод возвращает пустой Optional без вызова функции. В первый параметр мы передаем функцию, принимающую значение и возвращающую Optional. В отличие от метода map, который оборачивает результат в Optional, метод flatMap не создает дополнительной вложенности.

Синтаксис

optional.flatMap(mapper)

Пример

Давайте сравним поведение map и flatMap на одном и том же значении:

import java.util.Optional; public class Main { public static void main(String[] args) { Optional<String> opt = Optional.of("abcde"); Optional<Optional<String>> mapRes = opt.map(s -> Optional.of(s.toUpperCase())); Optional<String> flatMapRes = opt.flatMap(s -> Optional.of(s.toUpperCase())); System.out.println(mapRes); System.out.println(flatMapRes); } }

Результат выполнения кода:

Optional[Optional[ABCDE]] Optional[ABCDE]

Пример

Давайте применим flatMap для извлечения значения из вложенного Optional:

import java.util.Optional; public class Main { public static void main(String[] args) { Optional<String> opt = Optional.of("abcde"); Optional<Integer> res = opt.flatMap(s -> Optional.of(s.length())); System.out.println(res); } }

Результат выполнения кода:

Optional[5]

Пример

Если функция возвращает пустой Optional, результат также будет пустым:

import java.util.Optional; public class Main { public static void main(String[] args) { Optional<String> opt = Optional.of("abcde"); Optional<String> res = opt.flatMap(s -> Optional.empty()); System.out.println(res); } }

Результат выполнения кода:

Optional.empty

Пример

Если исходный Optional пуст, функция не вызывается и результат остается пустым:

import java.util.Optional; public class Main { public static void main(String[] args) { Optional<String> opt = Optional.empty(); Optional<Integer> res = opt.flatMap(s -> Optional.of(s.length())); System.out.println(res); } }

Результат выполнения кода:

Optional.empty

Смотрите также

  • метод map,
    который преобразует значение в новое
  • метод filter,
    который отсеивает значение по условию
  • метод stream,
    который превращает Optional в поток
  • метод get,
    который возвращает значение из Optional
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить