/** * A flattening transformation operation that takes the first value from the returned Publisher. * <pre> * {@code * Future.ofResult(1).map(i->i+2).mergeMap(i->Flux.just(()->i*3,20); * //Future[9] * * }</pre> * * @param mapper transformation function * @return MonadicValue */ default <R> MonadicValue<R> mergeMap(final Function<? super T, ? extends Publisher<? extends R>> mapper) { return this.flatMap(a -> { final Publisher<? extends R> publisher = mapper.apply(a); final ValueSubscriber<R> sub = ValueSubscriber.subscriber(); publisher.subscribe(sub); final Maybe<R> maybe = sub.toMaybe(); return maybe.fold(in->unit(in),__->emptyUnit()); }); }
@Test public void maybePublisherTest(){ ValueSubscriber<Integer> sub = ValueSubscriber.subscriber(); Maybe.of(1) .subscribe(sub); Maybe<Integer> maybe = sub.toMaybe(); assertThat(maybe.toOptional().get(),equalTo(1)); } @Test
@Test public void maybeTest(){ ValueSubscriber<Integer> sub = ValueSubscriber.subscriber(); ReactiveSeq.of(1,2,3) .subscribe(sub); Maybe<Integer> maybe = sub.toMaybe(); assertThat(maybe.toOptional().get(),equalTo(1)); } @Test
@Test public void maybePublisherTest(){ ValueSubscriber<Integer> sub = ValueSubscriber.subscriber(); Maybe.of(1) .subscribe(sub); Maybe<Integer> maybe = sub.toMaybe(); assertThat(maybe.toOptional().get(),equalTo(1)); } @Test
@Test public void maybeTest(){ ValueSubscriber<Integer> sub = ValueSubscriber.subscriber(); Spouts.of(1,2,3) .subscribe(sub); Maybe<Integer> maybe = sub.toMaybe(); assertThat(maybe.toOptional().get(),equalTo(1)); } @Test
@Test public void maybeNonePublisherTest(){ ValueSubscriber<Integer> sub = ValueSubscriber.subscriber(); Maybe.<Integer>nothing() .subscribe(sub); Maybe<Integer> maybe = sub.toMaybe(); assertFalse(maybe.isPresent()); } @Test
@Test public void maybeNonePublisherTest(){ ValueSubscriber<Integer> sub = ValueSubscriber.subscriber(); Maybe.<Integer>nothing() .subscribe(sub); Maybe<Integer> maybe = sub.toMaybe(); assertFalse(maybe.isPresent()); } @Test
/** * A flattening transformation operation that takes the first value from the returned Publisher. * <pre> * {@code * Future.ofResult(1).map(i->i+2).mergeMap(i->Flux.just(()->i*3,20); * //Future[9] * * }</pre> * * @param mapper transformation function * @return MonadicValue */ default <R> MonadicValue<R> mergeMap(final Function<? super T, ? extends Publisher<? extends R>> mapper) { return this.flatMap(a -> { final Publisher<? extends R> publisher = mapper.apply(a); final ValueSubscriber<R> sub = ValueSubscriber.subscriber(); publisher.subscribe(sub); final Maybe<R> maybe = sub.toMaybe(); return maybe.fold(in->unit(in),__->emptyUnit()); }); }
/** * Extract one value from the selected pipe, if it exists * * @param key : Adapter identifier * @return Maybe containing next value from the Adapter identified by the provided key */ @SuppressWarnings({ "unchecked", "rawtypes" }) public Option<V> oneValue(final K key) { final ValueSubscriber<V> sub = ValueSubscriber.subscriber(); return get(key).peek(a -> a.stream() .subscribe(sub)) .flatMap(a -> sub.toMaybe()); }
get(key).peek(a -> a.stream() .subscribe(sub)) .map(a -> sub.toMaybe().fold(s -> { res.complete(s); return Tuple.empty();
requested.setOnce(true); final Maybe<V> res = sub.toMaybe(); return res; }));
requested.setOnce(true); final Maybe<V> res = sub.toMaybe();