@Override public PushStream<T> sequential() { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); Lock lock = new ReentrantLock(); updateNext((event) -> { try { lock.lock(); try { return eventStream.handleEvent(event); } finally { lock.unlock(); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public PushStream<T> sequential() { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); Lock lock = new ReentrantLock(); updateNext((event) -> { try { lock.lock(); try { return eventStream.handleEvent(event); } finally { lock.unlock(); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public PushStream<T> sequential() { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); Lock lock = new ReentrantLock(); updateNext((event) -> { try { lock.lock(); try { return eventStream.handleEvent(event); } finally { lock.unlock(); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public PushStream<T> skip(long n) { if (n < 0) { throw new IllegalArgumentException( "The number to skip must be greater than or equal to zero"); } AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); AtomicLong counter = new AtomicLong(n); updateNext(event -> { try { if (!event.isTerminal()) { if (counter.get() > 0 && counter.decrementAndGet() >= 0) { return CONTINUE; } else { return eventStream.handleEvent(event); } } else { return eventStream.handleEvent(event.nodata()); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public PushStream<T> skip(long n) { if (n < 0) { throw new IllegalArgumentException( "The number to skip must be greater than or equal to zero"); } AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); AtomicLong counter = new AtomicLong(n); updateNext(event -> { try { if (!event.isTerminal()) { if (counter.get() > 0 && counter.decrementAndGet() >= 0) { return CONTINUE; } else { return eventStream.handleEvent(event); } } else { return eventStream.handleEvent(event.nodata()); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public PushStream<T> skip(long n) { if (n < 0) { throw new IllegalArgumentException( "The number to skip must be greater than or equal to zero"); } AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); AtomicLong counter = new AtomicLong(n); updateNext(event -> { try { if (!event.isTerminal()) { if (counter.get() > 0 && counter.decrementAndGet() >= 0) { return CONTINUE; } else { return eventStream.handleEvent(event); } } else { return eventStream.handleEvent(event.nodata()); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public PushStream<T> sorted(Comparator< ? super T> comparator) { List<T> list = Collections.synchronizedList(new ArrayList<>()); AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> {
@Override public PushStream<T> adjustBackPressure( ToLongBiFunction<T,Long> adjustment) { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> { try { long bp = eventStream.handleEvent(event); if (event.isTerminal()) { return ABORT; } else { return bp < 0 ? bp : adjustment.applyAsLong(event.getData(), Long.valueOf(bp)); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public PushStream<T> adjustBackPressure( ToLongBiFunction<T,Long> adjustment) { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> { try { long bp = eventStream.handleEvent(event); if (event.isTerminal()) { return ABORT; } else { return bp < 0 ? bp : adjustment.applyAsLong(event.getData(), Long.valueOf(bp)); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public PushStream<T> adjustBackPressure( ToLongBiFunction<T,Long> adjustment) { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> { try { long bp = eventStream.handleEvent(event); if (event.isTerminal()) { return ABORT; } else { return bp < 0 ? bp : adjustment.applyAsLong(event.getData(), Long.valueOf(bp)); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public <R> PushStream<R> coalesce( Function< ? super T,Optional<R>> accumulator) { AbstractPushStreamImpl<R> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext((event) -> { try { if (!event.isTerminal()) { Optional<PushEvent<R>> coalesced = accumulator .apply(event.getData()).map(PushEvent::data); if (coalesced.isPresent()) { try { return eventStream.handleEvent(coalesced.get()); } catch (Exception ex) { close(PushEvent.error(ex)); return ABORT; } } else { return CONTINUE; } } return eventStream.handleEvent(event.nodata()); } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public PushStream<T> adjustBackPressure(LongUnaryOperator adjustment) { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> { try { long bp = eventStream.handleEvent(event); if (event.isTerminal()) { return ABORT; } else { return bp < 0 ? bp : adjustment.applyAsLong(bp); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public PushStream<T> adjustBackPressure(LongUnaryOperator adjustment) { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> { try { long bp = eventStream.handleEvent(event); if (event.isTerminal()) { return ABORT; } else { return bp < 0 ? bp : adjustment.applyAsLong(bp); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public PushStream<T> adjustBackPressure(LongUnaryOperator adjustment) { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> { try { long bp = eventStream.handleEvent(event); if (event.isTerminal()) { return ABORT; } else { return bp < 0 ? bp : adjustment.applyAsLong(bp); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public PushStream<T> filter(Predicate< ? super T> predicate) { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext((event) -> { try { if (!event.isTerminal()) { if (predicate.test(event.getData())) { return eventStream.handleEvent(event); } else { return CONTINUE; } } return eventStream.handleEvent(event); } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public PushStream<T> filter(Predicate< ? super T> predicate) { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext((event) -> { try { if (!event.isTerminal()) { if (predicate.test(event.getData())) { return eventStream.handleEvent(event); } else { return CONTINUE; } } return eventStream.handleEvent(event); } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public PushStream<T> filter(Predicate< ? super T> predicate) { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext((event) -> { try { if (!event.isTerminal()) { if (predicate.test(event.getData())) { return eventStream.handleEvent(event); } else { return CONTINUE; } } return eventStream.handleEvent(event); } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public <R> PushStream<R> map(Function< ? super T, ? extends R> mapper) { AbstractPushStreamImpl<R> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> { try { if (!event.isTerminal()) { return eventStream.handleEvent( PushEvent.data(mapper.apply(event.getData()))); } else { return eventStream.handleEvent(event.nodata()); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public <R> PushStream<R> map(Function< ? super T, ? extends R> mapper) { AbstractPushStreamImpl<R> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> { try { if (!event.isTerminal()) { return eventStream.handleEvent( PushEvent.data(mapper.apply(event.getData()))); } else { return eventStream.handleEvent(event.nodata()); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public <R> PushStream<R> map(Function< ? super T, ? extends R> mapper) { AbstractPushStreamImpl<R> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> { try { if (!event.isTerminal()) { return eventStream.handleEvent( PushEvent.data(mapper.apply(event.getData()))); } else { return eventStream.handleEvent(event.nodata()); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }