Skip to content

Latest commit

 

History

History
47 lines (31 loc) · 3.6 KB

Optional.md

File metadata and controls

47 lines (31 loc) · 3.6 KB
tags title
Java, Basic, java.util, Optional
Optional

Optional

Предоставляет более удобный способ обработки null значений.

class Optional<T>

Основные методы это boolean isPresent() и T get(). Первый метод проверяет записано ли в объекте значение, второй его возвращает.

==Если внутри Optional null, то get() кинет исключение NoSuchElementException.==

Есть метод orElse(default), который возвращает значение по умолчанию, если внутри null.

Есть метод ifPresent(Consumer<? super T> consumer), который применяет consumer только если внутри не null. То есть не нужно писать самому if.

Создание объектов

Открытых конструкторов нет, но есть несколько статических методов

Метод Комментарий
empty() Возвращает объект, содержащий null
of(T value) Создаёт объект содержащий value. value не должен быть null
ofNullable(T value) Если значение null, то возвращает пустой объект, иначе объект содержащий value

Остальные методы

Метод Комментарий
Optional<T> filter(Predicate<T> p) Если true то вернёт тот же объект, иначе EMPTY
T orElseGet(Supplier<? extends T> other) Возвращает объект если он не EMPTY, иначе возвращает результат Supplier
<U> Optional<U> map(Function<T, U>) Если объект не EMPTY, то применяет к нему функцию, иначе возвращает EMPTY
<U> Optional<U> flatMap(Function<T, Optional<U>>) Если объект не EMPTY, то применяет к нему функцию, иначе возвращает EMPTY
<X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X Либо возвращает значение, либо кидает исключение

Optional для примитивов

Существуют классы OptionalDouble, OptionalInt и OptionalLong для работы с примитивами. Логика работы такая же, но методы получения объектов называются по другому (getAsDouble(), getAsInt() и getAsLong()).

Также там нет методов filter(), ofNullable(), map() и flatMap().