@Override public <X extends Throwable> Subscription forEachSubscribe(final Consumer<? super T> consumer) { StreamSubscription sub = source.subscribe(consumer, this.defaultErrorHandler, () -> { }); return sub; }
@Override public void forEachAsync(final Consumer<? super T> action) { if (async == Type.NO_BACKPRESSURE) source.subscribeAll(action, this.defaultErrorHandler, () -> { }); else source.subscribe(action, this.defaultErrorHandler, () -> { }).request(Long.MAX_VALUE); }
@Override public <X extends Throwable> void forEach(final Consumer<? super T> consumerElement, final Consumer<? super Throwable> consumerError) { if (async != Type.NO_BACKPRESSURE) { this.source.subscribe(consumerElement, consumerError, () -> { }).request(Long.MAX_VALUE); } else { source.subscribeAll(consumerElement, consumerError, () -> { }); } }
@Override public <X extends Throwable> Subscription forEachSubscribe(final Consumer<? super T> consumer, final Consumer<? super Throwable> consumerError, final Runnable onComplete) { StreamSubscription sub = source.subscribe(consumer, consumerError, onComplete); return sub; }
@Override public <X extends Throwable> void forEach(final Consumer<? super T> consumerElement, final Consumer<? super Throwable> consumerError, final Runnable onComplete) { if (async != Type.NO_BACKPRESSURE) { this.source.subscribe(consumerElement, consumerError, onComplete).request(Long.MAX_VALUE); } else { source.subscribeAll(consumerElement, consumerError, onComplete); } }
@Override public <X extends Throwable> Subscription forEachSubscribe(final Consumer<? super T> consumer, final Consumer<? super Throwable> consumerError) { StreamSubscription sub = source.subscribe(consumer, consumerError, () -> { }); return sub; }
@Override public void forEachOrdered(final Consumer<? super T> consumer) { Future<Boolean> complete = Future.future(); if (async == Type.NO_BACKPRESSURE) { source.subscribeAll(consumer, this.defaultErrorHandler, () -> complete.complete(true)); } else { source.subscribe(consumer, this.defaultErrorHandler, () -> complete.complete(true)).request(Long.MAX_VALUE); } complete.get(); }
@Override public StreamSubscription subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Runnable onComplete) { return source.subscribe(onNext, onError, () -> { complete.run(); onComplete.run(); }); }
@Override public void forEach(final Consumer<? super T> action) { Future<Boolean> complete = Future.future(); if (async == Type.NO_BACKPRESSURE) { source.subscribeAll(action, this.defaultErrorHandler, () -> complete.complete(true)); } else { source.subscribe(action, this.defaultErrorHandler, () -> complete.complete(true)).request(Long.MAX_VALUE); } complete.get(); }
@Override public StreamSubscription subscribe(Consumer<? super R> onNext, Consumer<? super Throwable> onError, Runnable onComplete) { return source.subscribe(e-> { try { onNext.accept(mapper.apply(e)); } catch (Throwable t) { onError.accept(t); } } ,onError,onComplete); }
@Override public StreamSubscription subscribe(Consumer<? super R> onNext, Consumer<? super Throwable> onError, Runnable onComplete) { Function<? super T, ? extends R> mapper = mapperSupplier.get(); return source.subscribe(e-> { try { onNext.accept(mapper.apply(e)); } catch (Throwable t) { onError.accept(t); } } ,onError,onComplete); }
@Override public StreamSubscription subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Runnable onComplete) { boolean[] data ={ false}; return source.subscribe(e->{ if(!data[0]) data[0]=true; onNext.accept(e); } ,onError,()->{ if(data[0]==false) onNext.accept(value.get()); onComplete.run(); }); }
@Override public <X extends Throwable> Subscription forEach(final long numberOfElements, final Consumer<? super T> consumer) { StreamSubscription sub = source.subscribe(consumer, this.defaultErrorHandler, () -> { }); if(numberOfElements>0) sub.request(numberOfElements); return sub; }
@Override public <X extends Throwable> Subscription forEach(final long numberOfElements, final Consumer<? super T> consumer, final Consumer<? super Throwable> consumerError) { StreamSubscription sub = source.subscribe(consumer, consumerError, () -> { }); if(numberOfElements>0) sub.request(numberOfElements); return sub; }
@Override public <X extends Throwable> Subscription forEach(final long numberOfElements, final Consumer<? super T> consumer, final Consumer<? super Throwable> consumerError, final Runnable onComplete) { StreamSubscription sub = source.subscribe(consumer, consumerError, onComplete); if(numberOfElements>0) sub.request(numberOfElements); return sub; }
@Test public void subscribeEmpty() throws Exception { Subscription sub = empty.subscribe(values::add,errors::add,()->onComplete =true); sub.request(1l); assertThat(values.size(),equalTo(0)); assertThat(errors.size(),equalTo(0)); sub.request(1l); assertThat(values.size(),equalTo(0)); assertThat(errors.size(),equalTo(0)); assertTrue(onComplete); } @Test
@Test public void subscribeOne() throws Exception { Subscription sub = one.subscribe(values::add,errors::add,()->onComplete =true); sub.request(1l); assertThat(values.size(),equalTo(1)); assertThat(errors.size(),equalTo(0)); sub.request(1l); assertThat("Values " + values,values.size(),equalTo(1)); assertThat(errors.size(),equalTo(0)); assertTrue(onComplete); } @Test
@Test public void subscribeThreeErrors() throws Exception { Subscription sub = threeErrors.subscribe(values::add,errors::add,()->onComplete =true); sub.request(1l); assertThat(values.size(),equalTo(0)); assertThat(errors.size(),equalTo(3)); assertTrue(onComplete); }
@Test public void subscribeOneMaxLong() throws Exception { Subscription sub = one.subscribe(values::add,errors::add,()->onComplete =true); sub.request(Long.MAX_VALUE); assertThat(values.size(),equalTo(1)); assertThat(errors.size(),equalTo(0)); assertTrue(onComplete); sub.request(1l); assertThat("Values " + values,values.size(),equalTo(1)); assertThat(errors.size(),equalTo(0)); assertTrue(onComplete); } @Test
@Test public void subscribeThreeCancel() throws Exception { Subscription sub = three.subscribe(values::add,errors::add,()->onComplete =true); sub.cancel(); sub.request(1l); assertThat(values.size(),equalTo(0)); assertThat(errors.size(),equalTo(0)); assertFalse(onComplete); sub.request(1l); assertThat(values.size(),equalTo(0)); assertThat(errors.size(),equalTo(0)); assertFalse(onComplete); }