package com.github.davidmoten.util; import rx.Observable; public class Optional<T> { private final T value; private final boolean present; private Optional(T value, boolean present) { this.value = value; this.present = present; } public boolean isPresent() { return present; } public T get() { if (present) return value; else throw new NotPresentException(); } public T or(T alternative) { if (present) return value; else return alternative; } public Observable<T> toObservable() { if (present) return Observable.just(value); else return Observable.empty(); } public static <T> Optional<T> fromNullable(T t) { if (t == null) return Optional.absent(); else return Optional.of(t); } public static <T> Optional<T> of(T t) { return new Optional<T>(t, true); } public static <T> Optional<T> absent() { return new Optional<T>(null, false); } public static class NotPresentException extends RuntimeException { private static final long serialVersionUID = -4444814681271790328L; } }