
alexh.weak.OptionalWeak Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of dynamics Show documentation
Show all versions of dynamics Show documentation
Java library for handling nested dynamic data
package alexh.weak;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
/** Enhanced version of an Optional, similar methods to Weak that return Optionals and don't throw */
public class OptionalWeak> {
private static final OptionalWeak EMPTY = new OptionalWeak(Optional.empty());
public static > OptionalWeak of(T val) {
return new OptionalWeak<>(Optional.ofNullable(val));
}
@SuppressWarnings("unchecked")
public static > OptionalWeak empty() {
return (OptionalWeak) EMPTY;
}
private final Optional inner;
private OptionalWeak(Optional inner) {
this.inner = inner.filter(d -> d.isPresent());
}
public W get() {
return inner.get();
}
public boolean isPresent() {
return inner.isPresent();
}
public void ifPresent(Consumer super W> consumer) {
inner.ifPresent(consumer);
}
public OptionalWeak filter(Predicate super W> predicate) {
Objects.requireNonNull(predicate);
if (!isPresent()) return this;
else return predicate.test(get()) ? this : empty();
}
/** @see Optional#map(Function) */
public Optional map(Function super W, ? extends U> mapper) {
return inner.map(mapper);
}
/** @see Optional#flatMap(Function) */
public Optional flatMap(Function super W, Optional> mapper) {
return inner.flatMap(mapper);
}
/** @see Optional#orElse(Object) */
public W orElse(W other) {
return inner.orElse(other);
}
/** @see Optional#orElseGet(Supplier) */
public W orElseGet(Supplier extends W> other) {
return inner.orElseGet(other);
}
/** @see Optional#orElseThrow(Supplier) */
public W orElseThrow(Supplier extends X> exceptionSupplier) throws X {
return inner.orElseThrow(exceptionSupplier);
}
/**
* @return inner value as an optional
*/
public Optional
© 2015 - 2025 Weber Informatics LLC | Privacy Policy