## Uses of Class
java.util.Optional

Packages that use Optional
java.util: Contains the collections framework, legacy collection classes, event model, date and time facilities, internationalization, and miscellaneous utility classes (a string tokenizer, a random-number generator, and a bit array).
java.util.stream: Classes to support functional-style operations on streams of elements, such as map-reduce transformations on collections.

### Uses of Optional in java.util

Methods in java.util that return Optional
`static <T> Optional<T>` Optional.`empty()` Returns an empty `Optional` instance.
`Optional<T>` Optional.`filter(Predicate<? super T> predicate)` If a value is present, and the value matches the given predicate, return an `Optional` describing the value, otherwise return an empty `Optional`.
`<U> Optional<U>` Optional.`flatMap(Function<? super T,Optional<U>> mapper)` If a value is present, apply the provided `Optional`-bearing mapping function to it, return that result, otherwise return an empty `Optional`.
`<U> Optional<U>` Optional.`map(Function<? super T,? extends U> mapper)` If a value is present, apply the provided mapping function to it, and if the result is non-null, return an `Optional` describing the result.
`static <T> Optional<T>` Optional.`of(T value)` Returns an `Optional` with the specified present non-null value.
`static <T> Optional<T>` Optional.`ofNullable(T value)` Returns an `Optional` describing the specified value, if non-null, otherwise returns an empty `Optional`.

Method parameters in java.util with type arguments of type Optional
`<U> Optional<U>` Optional.`flatMap(Function<? super T,Optional<U>> mapper)` If a value is present, apply the provided `Optional`-bearing mapping function to it, return that result, otherwise return an empty `Optional`.

### Uses of Optional in java.util.stream

Methods in java.util.stream that return Optional
`Optional<T>` Stream.`findAny()` Returns an `Optional` describing some element of the stream, or an empty `Optional` if the stream is empty.
`Optional<T>` Stream.`findFirst()` Returns an `Optional` describing the first element of this stream, or an empty `Optional` if the stream is empty.
`Optional<T>` Stream.`max(Comparator<? super T> comparator)` Returns the maximum element of this stream according to the provided `Comparator`.
`Optional<T>` Stream.`min(Comparator<? super T> comparator)` Returns the minimum element of this stream according to the provided `Comparator`.
`Optional<T>` Stream.`reduce(BinaryOperator<T> accumulator)` Performs a reduction on the elements of this stream, using an associative accumulation function, and returns an `Optional` describing the reduced value, if any.

Methods in java.util.stream that return types with arguments of type Optional
`static <T> Collector<T,?,Optional<T>>` Collectors.`maxBy(Comparator<? super T> comparator)` Returns a `Collector` that produces the maximal element according to a given `Comparator`, described as an `Optional<T>`.
`static <T> Collector<T,?,Optional<T>>` Collectors.`minBy(Comparator<? super T> comparator)` Returns a `Collector` that produces the minimal element according to a given `Comparator`, described as an `Optional<T>`.
`static <T> Collector<T,?,Optional<T>>` Collectors.`reducing(BinaryOperator<T> op)` Returns a `Collector` which performs a reduction of its input elements under a specified `BinaryOperator`.