Цепочки шагов с Optional в Java
Несколько шагов подряд читаются как pipeline: каждый метод получает контейнер от предыдущего. Пустота на любом этапе останавливает дальнейшую работу, но не ломает программу.
Разбор необязательного поля профиля:
import java.util.Optional;
record Profile(Optional<String> email) {}
Optional<String> domain(Profile profile) {
return profile.email()
.map(String::trim)
.filter(s -> s.contains("@"))
.map(s -> s.substring(s.indexOf('@') + 1));
}
Если email пуст, строка без @ или после
trim не проходит filter, итоговый
контейнер пуст. Иначе внутри лежит домен.
В конце цепочки часто стоят orElse,
orElseGet или ifPresent:
import java.util.Optional;
Optional<String> nick = Optional.ofNullable(null)
.map(String::trim)
.filter(s -> !s.isEmpty());
String shown = nick.orElse("guest");
System.out.println(shown);
Метод or подставляет другой Optional,
если текущий пуст. Его добавляют, когда есть запасной
источник того же типа.
Дан код:
String input = " 42 ";
Обрежьте пробелы, попробуйте получить число
и выведите его. Если число получить нельзя,
выведите 0.