В новом функциональном стиле программирования, который был представлен в Java 8, очень важным становится понимание работы с классом Optional
. Этот класс используется для представления опциональных значений, которые могут быть либо присутствовать, либо отсутствовать.
Рассмотрим пример кода, где используется Optional
:
Optional<String> opt = getOptionalValue(); if (opt.isPresent()) { System.out.println("Value found: " + opt.get()); } else { System.out.println("No value found"); }
В этом примере, если Optional
содержит значение, оно выводится на печать. В противном случае выводится сообщение о том, что значение не найдено. Однако этот код написан не в функциональном стиле.
В Java 8 были добавлены новые методы для работы с Optional
в функциональном стиле. Один из них – метод ifPresent()
, который принимает лямбда-выражение и выполняет его, если в Optional
присутствует значение.
opt.ifPresent(value -> System.out.println("Value found: " + value));
Однако, что делать, если нужно выполнить какое-то действие в случае, если Optional
не содержит значения? Для этого есть метод orElse()
, который возвращает значение по умолчанию в случае, если в Optional
нет значения. Но этот метод не принимает лямбда-выражения и не может быть использован для выполнения произвольного кода.
Вот как можно воспользоваться им:
String value = opt.orElse("No value found"); System.out.println(value);
В этом коде, если Optional
не содержит значения, то orElse()
вернет строку "No value found"
, которая затем будет выведена на печать.
Важно отметить, что orElse()
и ifPresent()
не могут быть использованы вместе в одной цепочке вызовов, так как ifPresent()
возвращает void
.
// Неверно opt.ifPresent(value -> System.out.println("Value found: " + value)) .orElse("No value found"); // Ошибка компиляции
Таким образом, в Java 8 для выполнения различных действий в зависимости от того, присутствует ли значение в Optional
или нет, придется использовать старый добрый условный оператор.
Добавить комментарий