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 }