Класс Optional
- Параметры типа:
-
T- тип значения
public final class Optional<T> extends Object
null. Если значение присутствует, isPresent() возвращает true. Если значение отсутствует, объект считается пустым и isPresent() возвращает false. Предоставляются дополнительные методы, зависящие от наличия или отсутствия содержащегося значения, такие как orElse() (возвращает значение по умолчанию, если значение отсутствует) и ifPresent() (выполняет действие, если значение присутствует).
Этот класс является значение-ориентированным; программисты должны рассматривать экземпляры, которые равны, как взаимозаменяемые и не должны использовать экземпляры для синхронизации, иначе может произойти непредсказуемое поведение. Например, в будущей версии синхронизация может не сработать.
- Примечание API:
-
Optionalпредназначен в первую очередь для использования в качестве типа возвращаемого значения метода, где явно требуется представление «отсутствующего результата», и где использованиеnullможет привести к ошибкам. Переменная, тип которойOptional, никогда не должна бытьnull; она всегда должна указывать на экземплярOptional. - С тех пор:
- 1.8
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static <T> Optional |
empty() |
Возвращает пустой экземпляр Optional. |
boolean |
equals |
Указывает, является ли другой объект «равным» этому Optional. |
Optional |
filter |
Если значение присутствует и значение соответствует заданному предикату, возвращает Optional , описывающее значение, в противном случае возвращает пустой Optional. |
<U> Optional |
flatMap |
Если значение присутствует, возвращает результат применения заданной функции преобразования, принимающей Optional, к значению, в противном случае возвращает пустой Optional. |
T |
get() |
Если значение присутствует, возвращает значение, в противном случае выбрасывает NoSuchElementException. |
int |
hashCode() |
Возвращает хэш-код значения, если оно присутствует, в противном случае 0 (ноль), если значение отсутствует. |
void |
ifPresent |
Если значение присутствует, выполняет заданное действие со значением, в противном случае ничего не делает. |
void |
ifPresentOrElse |
Если значение присутствует, выполняет заданное действие со значением, в противном случае выполняет заданное действие для пустого значения. |
boolean |
isEmpty() |
Если значение отсутствует, возвращает true, иначе false. |
boolean |
isPresent() |
Если значение присутствует, возвращает true, иначе false. |
<U> Optional |
map |
Если значение присутствует, возвращает Optional , описывающий (как если бы с помощью ofNullable(T)) результат применения заданной функции преобразования к значению, в противном случае возвращает пустой Optional. |
static <T> Optional |
of |
Возвращает Optional , описывающий заданное значение, отличное от null. |
static <T> Optional |
ofNullable |
Возвращает Optional , описывающий данное значение, если оно не null, в противном случае возвращает пустой Optional. |
Optional |
or |
Если значение присутствует, возвращает Optional , описывающее значение, в противном случае возвращает Optional , созданное с помощью предоставленной функции. |
T |
orElse |
Если значение присутствует, возвращает значение, в противном случае возвращает other. |
T |
orElseGet |
Если значение присутствует, возвращает значение, в противном случае возвращает результат, созданный с помощью предоставленной функции. |
T |
orElseThrow() |
Если значение присутствует, возвращает значение, в противном случае выбрасывает NoSuchElementException. |
<X extends Throwable> |
orElseThrow |
Если значение присутствует, возвращает значение, в противном случае выбрасывает исключение, созданное с помощью функции, предоставляющей исключение. |
Stream |
stream() |
Если значение присутствует, возвращает последовательную Stream , содержащую только это значение, в противном случае возвращает пустой Stream. |
String |
toString() |
Возвращает строковое представление этого Optional , подходящее для отладки. |
Подробное описание методов
empty
public static <T> Optional<T> empty()
Optional экземпляр. Значение для этого Optional отсутствует.- Примечание API:
- Несмотря на то, что это может показаться заманчивым, избегайте проверки, является ли объект пустым, сравнивая его с
==или!=с экземплярами, возвращаемымиOptional.empty(). Нет гарантии, что это одиночный экземпляр. Вместо этого используйтеisEmpty()илиisPresent(). - Параметры типа:
-
T- тип отсутствующего значения - Возвращает:
- пустой
Optional
of
public static <T> Optional<T> of(T value)
Optional, описывающую данное значение, отличное от null.- Параметры типа:
-
T- тип значения - Параметры:
-
value- описываемое значение, которое должно быть отличным отnull - Возвращает:
Optionalсо значением, присутствующим- Выбрасывает:
-
NullPointerException- если значение являетсяnull
ofNullable
public static <T> Optional<T> ofNullable(T value)
Optional, описывающую заданное значение, если оно не null, в противном случае возвращает пустой Optional.- Параметры типа:
-
T- тип значения - Параметры:
-
value- возможно пустое значение для описания - Возвращает:
Optionalсо значением, если указанное значение неnull, в противном случае пустойOptional
get
public T get()
NoSuchElementException.- Примечание API:
- Предпочтительной альтернативой этому методу является
orElseThrow(). - Возвращает:
- значение, отличное от
null, описанное этимOptional - Выбрасывает:
-
NoSuchElementException- если значение не присутствует
isPresent
public boolean isPresent()
true, в противном случае false.- Возвращает:
-
trueесли значение присутствует, в противном случаеfalse
isEmpty
public boolean isEmpty()
true, в противном случае false.- Возвращает:
-
trueесли значение отсутствует, в противном случаеfalse - С:
- 11
ifPresent
public void ifPresent(Consumer<? super T> action)
- Параметры:
-
action- действие, которое должно быть выполнено, если значение присутствует - Выбрасывает:
-
NullPointerException- если значение присутствует и данное действие являетсяnull
ifPresentOrElse
public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)
- Параметры:
-
action- действие, которое должно быть выполнено, если значение присутствует -
emptyAction- действие по умолчанию, которое должно быть выполнено, если значение отсутствует - Выбрасывает:
-
NullPointerException- если значение присутствует и данное действие являетсяnull, или значение отсутствует и данное действие по умолчанию являетсяnull. - С:
- 9
filter
public Optional<T> filter(Predicate<? super T> predicate)
Optional описывающее значение, в противном случае возвращает пустой Optional.- Параметры:
-
predicate- предикат, применяемый к значению, если оно присутствует - Возвращает:
Optionalописывающее значение этогоOptional, если значение присутствует и значение соответствует заданному предикату, в противном случае пустойOptional- Выбрасывает:
-
NullPointerException- если предикат являетсяnull
map
public <U> Optional<U> map(Function<? super T,? extends U> mapper)
Optional (как если бы с помощью ofNullable(T)), результат применения заданной функции отображения к значению, в противном случае возвращает пустой Optional. Если функция отображения возвращает null результат, то этот метод возвращает пустой Optional.
- Примечание API:
- Этот метод поддерживает пост-обработку значений
Optionalбез необходимости явной проверки статуса возврата. Например, следующий код перебирает поток URI, выбирает тот, который еще не обработан, и создаёт путь из этого URI, возвращаяOptional<Path>:
Здесь,Optional<Path> p = uris.stream().filter(uri -> !isProcessedYet(uri)) .findFirst() .map(Paths::get);findFirstвозвращаетOptional<URI>, а затемmapвозвращаетOptional<Path>для нужного URI, если он существует. - Параметры типа:
-
U- тип значения, возвращаемого функцией отображения - Параметры:
-
mapper- функция отображения, применяемая к значению, если оно присутствует - Возвращает:
Optionalописывающий результат применения функции отображения к значению этогоOptional, если значение присутствует, в противном случае пустойOptional- Выбрасывает:
-
NullPointerException- если функция отображения являетсяnull
flatMap
public <U> Optional<U> flatMap(Function<? super T,? extends Optional<? extends U>> mapper)
Optional, к значению, в противном случае возвращает пустой Optional. Этот метод похож на map(Function), но функция отображения возвращает уже Optional, и если вызвана, flatMap не оборачивает её в дополнительный Optional.
- Параметры типа:
-
U- тип значенияOptionalвозвращаемого функцией отображения - Параметры:
-
mapper- функция отображения, применяемая к значению, если оно присутствует - Возвращает:
- результат применения функции отображения, возвращающей
Optionalк значению этогоOptional, если значение присутствует, в противном случае пустойOptional - Выбрасывает:
-
NullPointerException- если функция отображения являетсяnullили возвращаетnullрезультат
or
public Optional<T> or(Supplier<? extends Optional<? extends T>> supplier)
Optional описывающее значение, в противном случае возвращает Optional произведённое функцией.- Параметры:
-
supplier- функция, которая производитOptionalдля возврата - Возвращает:
- возвращает
Optionalописывающее значение этогоOptional, если значение присутствует, в противном случаеOptionalпроизведённое функцией. - Выбрасывает:
-
NullPointerException- если функция являетсяnullили возвращаетnullрезультат - С:
- 9
stream
public Stream<T> stream()
Stream содержащий только это значение, в противном случае возвращает пустой Stream.- Примечание API:
- Этот метод может быть использован для преобразования потока
Streamэлементов optional в потокStreamэлементов present value:Stream<Optional<T>> os = .. Stream<T> s = os.flatMap(Optional::stream) - Возвращает:
- значение optional в виде
Stream - С:
- 9
orElse
public T orElse(T other)
other.- Параметры:
-
other- значение для возврата, если значение отсутствует. Может бытьnull. - Возвращает:
- значение, если присутствует, в противном случае
other
orElseGet
public T orElseGet(Supplier<? extends T> supplier)
- Параметры:
-
supplier- функция, которая производит значение для возврата - Возвращает:
- значение, если присутствует, в противном случае результат, произведённый функцией
- Выбрасывает:
-
NullPointerException- если значение отсутствует и функция являетсяnull
orElseThrow
public T orElseThrow()
NoSuchElementException.- Возвращает:
- значение, отличное от
null, описанное этимOptional - Выбрасывает:
-
NoSuchElementException- если значение отсутствует - С:
- 10
orElseThrow
public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X
- API Note:
- В качестве поставщика можно использовать ссылку на метод конструктора исключения с пустым списком аргументов. Например,
IllegalStateException::new - Type Parameters:
-
X- Тип исключения, которое должно быть выброшено - Parameters:
-
exceptionSupplier- функция-поставщик, генерирующая исключение, которое должно быть выброшено - Returns:
- значение, если оно присутствует
- Throws:
-
X- если значение отсутствует -
NullPointerException- если значение отсутствует, и функция-поставщик исключенийnull
equals
public boolean equals(Object obj)
Optional. Другой объект считается равным, если: - он также является
Optionalи; - оба экземпляра не содержат значения или;
- присутствующие значения "равны" друг другу с помощью
equals().
- Overrides:
-
equalsв классеObject - Parameters:
-
obj- объект, который должен быть проверен на равенство - Returns:
-
trueесли другой объект "равен" этому объекту, иначеfalse - See Also:
hashCode
public int hashCode()
0 (ноль), если значение отсутствует.- Overrides:
-
hashCodeв классеObject - Returns:
- значение хеш-кода присутствующего значения или
0если значение отсутствует - See Also:
toString
public String toString()
Optional , подходящую для отладки. Точный формат представления не определен и может отличаться в различных реализациях и версиях.- Overrides:
-
toStringв классеObject - Implementation Requirements:
- Если значение присутствует, результат должен включать его строковое представление в результате. Пустые и присутствующие
Optionalдолжны быть однозначно различимы. - Returns:
- строковое представление этого экземпляра
© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/Optional.html