1 package org.davidmoten.kool.internal.operators.maybe; 2 3 import java.util.Optional; 4 5 import org.davidmoten.kool.Maybe; 6 import org.davidmoten.kool.function.Function; 7 8 import com.github.davidmoten.guavamini.Preconditions; 9 10 public final class MaybeFlatMapMaybe<T, R> implements Maybe<R> { 11 12 private final Maybe<T> maybe; 13 private final Function<? super T, ? extends Maybe<? extends R>> mapper; 14 15 public MaybeFlatMapMaybe(Maybe<T> maybe, Function<? super T, ? extends Maybe<? extends R>> mapper) { 16 this.maybe = maybe; 17 this.mapper = mapper; 18 } 19 20 @SuppressWarnings("unchecked") 21 @Override 22 public Optional<R> get() { 23 Optional<T> v = maybe.get(); 24 if (v.isPresent()) { 25 return (Optional<R>) Preconditions.checkNotNull(mapper.applyUnchecked(v.get()), "mapper cannot return null").get(); 26 } else { 27 return Optional.empty(); 28 } 29 } 30 31 }