
alexh.weak.OptionalWeak Maven / Gradle / Ivy
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