/** * If a value is present, returns a sequential {@link Stream} containing * only that value, otherwise returns an empty {@code Stream}. * * @apiNote * This method can be used to transform a {@code Stream} of optional * elements to a {@code Stream} of present value elements: * <pre>{@code * Stream<Optional<T>> os = .. * Stream<T> s = os.flatMap(Optional::stream) * }</pre> * * @return the optional value as a {@code Stream} * @since 9 */ public Stream<T> stream() { if (!isPresent()) { return Stream.empty(); } else { return Stream.of(value); } }
/** * If a value is present, performs the given action with the value, * otherwise performs the given empty-based action. * * @param action the action to be performed, if a value is present * @param emptyAction the empty-based action to be performed, if no value is * present * @throws NullPointerException if a value is present and the given action * is {@code null}, or no value is present and the given empty-based * action is {@code null}. * @since 9 */ publicvoidifPresentOrElse(Consumer<? super T> action, Runnable emptyAction) { if (value != null) { action.accept(value); } else { emptyAction.run(); } }
/** * If a value is present, returns an {@code Optional} describing the value, * otherwise returns an {@code Optional} produced by the supplying function. * * @param supplier the supplying function that produces an {@code Optional} * to be returned * @return returns an {@code Optional} describing the value of this * {@code Optional}, if a value is present, otherwise an * {@code Optional} produced by the supplying function. * @throws NullPointerException if the supplying function is {@code null} or * produces a {@code null} result * @since 9 */ public Optional<T> or(Supplier<? extends Optional<? extends T>> supplier) { Objects.requireNonNull(supplier); if (isPresent()) { returnthis; } else { @SuppressWarnings("unchecked") Optional<T> r = (Optional<T>) supplier.get(); return Objects.requireNonNull(r); } }
/** * If a value is present, returns the value, otherwise throws * {@code NoSuchElementException}. * * @return the non-{@code null} value described by this {@code Optional} * @throws NoSuchElementException if no value is present * @since 10 */ public T orElseThrow() { if (value == null) { thrownewNoSuchElementException("No value present"); } return value; }
用法:
1
Optional.ofNullable(null).orElseThrow();
最后是java11中出现的
判断是否有值
1 2 3 4 5 6 7 8 9 10
/** * If a value is not present, returns {@code true}, otherwise * {@code false}. * * @return {@code true} if a value is not present, otherwise {@code false} * @since 11 */ publicbooleanisEmpty() { return value == null; }