@Override public Spliterator<T> copy() { return new IteratableSpliterator<>(source); } }
public static <T> ReactiveSeq<T> oneShotStream(final Iterable<T> iterable) { Objects.requireNonNull(iterable); return new OneShotStreamX<T>(new IteratableSpliterator<T>(iterable), Optional.empty()); } public static <T> ReactiveSeq<T> oneShotStream(Stream<T> stream){
/** * Construct a ReactiveSeq from an Iterable * * @param iterable * to construct Sequence from * @return ReactiveSeq */ public static <T> ReactiveSeq<T> fromIterable(final Iterable<T> iterable) { Objects.requireNonNull(iterable); if (iterable instanceof ReactiveSeq) { return (ReactiveSeq<T>)iterable; } if( iterable instanceof ToStream){ return ((ToStream<T>)iterable).stream(); } //we can't just use the Iterable's Spliteratable as it might not be repeatable / copyable. return Streams.reactiveSeq(new IteratableSpliterator<T>(iterable), Optional.empty()); } public static <T> ReactiveSeq<T> reactiveSeq(final Iterable<T> iterable) {
@Override public ReactiveSeq<T> combine(BiPredicate<? super T, ? super T> predicate, BinaryOperator<T> op) { return createSeq(new IteratableSpliterator<>(Streams.combineI(this,predicate,op))) .concatMap(i->i); }
@Override @SuppressWarnings("unchecked") public Tuple4<ReactiveSeq<T>, ReactiveSeq<T>, ReactiveSeq<T>, ReactiveSeq<T>> quadruplicate(Supplier<Deque<T>> bufferFactory) { Seq<Iterable<T>> copy = Streams.toBufferingCopier(() -> Spliterators.iterator(copy()), 4,bufferFactory); return Tuple.tuple(createSeq(new IteratableSpliterator<>(copy.getOrElseGet(0,()->ReactiveSeq.empty()))), createSeq(new IteratableSpliterator<>(copy.getOrElseGet(1,()->ReactiveSeq.empty()))), createSeq(new IteratableSpliterator<>(copy.getOrElseGet(2,()->ReactiveSeq.empty()))), createSeq(new IteratableSpliterator<>(copy.getOrElseGet(3,()->ReactiveSeq.empty())))); }
@Override @SuppressWarnings("unchecked") public Tuple4<ReactiveSeq<T>, ReactiveSeq<T>, ReactiveSeq<T>, ReactiveSeq<T>> quadruplicate() { Seq<Iterable<T>> copy = Streams.toBufferingCopier(() -> Spliterators.iterator(copy()), 4); return Tuple.tuple(createSeq(new IteratableSpliterator<>(copy.getOrElseGet(0,()->ReactiveSeq.empty()))), createSeq(new IteratableSpliterator<>(copy.getOrElseGet(1,()->ReactiveSeq.empty()))), createSeq(new IteratableSpliterator<>(copy.getOrElseGet(2,()->ReactiveSeq.empty()))), createSeq(new IteratableSpliterator<>(copy.getOrElseGet(3,()->ReactiveSeq.empty())))); } @Override
@Override @SuppressWarnings("unchecked") public Tuple3<ReactiveSeq<T>, ReactiveSeq<T>, ReactiveSeq<T>> triplicate() { Seq<Iterable<T>> copy = Streams.toBufferingCopier(() -> Spliterators.iterator(copy()), 3); return Tuple.tuple(createSeq(new IteratableSpliterator<>(copy.getOrElseGet(0,()->ReactiveSeq.empty()))), createSeq(new IteratableSpliterator<>(copy.getOrElseGet(1,()->ReactiveSeq.empty()))), createSeq(new IteratableSpliterator<>(copy.getOrElseGet(2,()->ReactiveSeq.empty())))); }
@Override @SuppressWarnings("unchecked") public Tuple3<ReactiveSeq<T>, ReactiveSeq<T>, ReactiveSeq<T>> triplicate(Supplier<Deque<T>> bufferFactory) { Seq<Iterable<T>> copy = Streams.toBufferingCopier(() -> Spliterators.iterator(copy()), 3,bufferFactory); return Tuple.tuple(createSeq(new IteratableSpliterator<>(copy.getOrElseGet(0,()->ReactiveSeq.empty()))), createSeq(new IteratableSpliterator<>(copy.getOrElseGet(1,()->ReactiveSeq.empty()))), createSeq(new IteratableSpliterator<>(copy.getOrElseGet(2,()->ReactiveSeq.empty())))); }
@Override public Tuple2<ReactiveSeq<T>, ReactiveSeq<T>> duplicate() { Seq<Iterable<T>> copy = Streams.toBufferingCopier(() -> Spliterators.iterator(copy()), 2); return Tuple.tuple(createSeq(new IteratableSpliterator<>(copy.getOrElseGet(0,()->ReactiveSeq.empty()))), createSeq(new IteratableSpliterator<>(copy.getOrElseGet(1,()->ReactiveSeq.empty())))); } @Override
@Override public Tuple2<ReactiveSeq<T>, ReactiveSeq<T>> duplicate(Supplier<Deque<T>> bufferFactory) { Seq<Iterable<T>> copy = Streams.toBufferingCopier(() -> Spliterators.iterator(copy()), 2,bufferFactory); return Tuple.tuple(createSeq(new IteratableSpliterator<>(copy.getOrElseGet(0,()->ReactiveSeq.empty()))), createSeq(new IteratableSpliterator<>(copy.getOrElseGet(1,()->ReactiveSeq.empty())))); }
@Override public Spliterator<T> copy() { return new IteratableSpliterator<>(source); } }
public static <T> ReactiveSeq<T> oneShotStream(final Iterable<T> iterable) { Objects.requireNonNull(iterable); return new OneShotStreamX<T>(new IteratableSpliterator<T>(iterable), Optional.empty()); } public static <T> ReactiveSeq<T> oneShotStream(Stream<T> stream){
/** * Construct a ReactiveSeq from an Iterable * * @param iterable * to construct Sequence from * @return ReactiveSeq */ public static <T> ReactiveSeq<T> fromIterable(final Iterable<T> iterable) { Objects.requireNonNull(iterable); if (iterable instanceof ReactiveSeq) { return (ReactiveSeq<T>)iterable; } if( iterable instanceof ToStream){ return ((ToStream<T>)iterable).stream(); } //we can't just use the Iterable's Spliteratable as it might not be repeatable / copyable. return Streams.reactiveSeq(new IteratableSpliterator<T>(iterable), Optional.empty()); } public static <T> ReactiveSeq<T> reactiveSeq(final Iterable<T> iterable) {
@Override public ReactiveSeq<T> combine(BiPredicate<? super T, ? super T> predicate, BinaryOperator<T> op) { return createSeq(new IteratableSpliterator<>(Streams.combineI(this,predicate,op))) .concatMap(i->i); }
@Override @SuppressWarnings("unchecked") public Tuple4<ReactiveSeq<T>, ReactiveSeq<T>, ReactiveSeq<T>, ReactiveSeq<T>> quadruplicate() { Seq<Iterable<T>> copy = Streams.toBufferingCopier(() -> Spliterators.iterator(copy()), 4); return Tuple.tuple(createSeq(new IteratableSpliterator<>(copy.getOrElseGet(0,()->ReactiveSeq.empty()))), createSeq(new IteratableSpliterator<>(copy.getOrElseGet(1,()->ReactiveSeq.empty()))), createSeq(new IteratableSpliterator<>(copy.getOrElseGet(2,()->ReactiveSeq.empty()))), createSeq(new IteratableSpliterator<>(copy.getOrElseGet(3,()->ReactiveSeq.empty())))); } @Override
@Override @SuppressWarnings("unchecked") public Tuple4<ReactiveSeq<T>, ReactiveSeq<T>, ReactiveSeq<T>, ReactiveSeq<T>> quadruplicate(Supplier<Deque<T>> bufferFactory) { Seq<Iterable<T>> copy = Streams.toBufferingCopier(() -> Spliterators.iterator(copy()), 4,bufferFactory); return Tuple.tuple(createSeq(new IteratableSpliterator<>(copy.getOrElseGet(0,()->ReactiveSeq.empty()))), createSeq(new IteratableSpliterator<>(copy.getOrElseGet(1,()->ReactiveSeq.empty()))), createSeq(new IteratableSpliterator<>(copy.getOrElseGet(2,()->ReactiveSeq.empty()))), createSeq(new IteratableSpliterator<>(copy.getOrElseGet(3,()->ReactiveSeq.empty())))); }
@Override @SuppressWarnings("unchecked") public Tuple3<ReactiveSeq<T>, ReactiveSeq<T>, ReactiveSeq<T>> triplicate() { Seq<Iterable<T>> copy = Streams.toBufferingCopier(() -> Spliterators.iterator(copy()), 3); return Tuple.tuple(createSeq(new IteratableSpliterator<>(copy.getOrElseGet(0,()->ReactiveSeq.empty()))), createSeq(new IteratableSpliterator<>(copy.getOrElseGet(1,()->ReactiveSeq.empty()))), createSeq(new IteratableSpliterator<>(copy.getOrElseGet(2,()->ReactiveSeq.empty())))); }
@Override @SuppressWarnings("unchecked") public Tuple3<ReactiveSeq<T>, ReactiveSeq<T>, ReactiveSeq<T>> triplicate(Supplier<Deque<T>> bufferFactory) { Seq<Iterable<T>> copy = Streams.toBufferingCopier(() -> Spliterators.iterator(copy()), 3,bufferFactory); return Tuple.tuple(createSeq(new IteratableSpliterator<>(copy.getOrElseGet(0,()->ReactiveSeq.empty()))), createSeq(new IteratableSpliterator<>(copy.getOrElseGet(1,()->ReactiveSeq.empty()))), createSeq(new IteratableSpliterator<>(copy.getOrElseGet(2,()->ReactiveSeq.empty())))); }
@Override public Tuple2<ReactiveSeq<T>, ReactiveSeq<T>> duplicate() { Seq<Iterable<T>> copy = Streams.toBufferingCopier(() -> Spliterators.iterator(copy()), 2); return Tuple.tuple(createSeq(new IteratableSpliterator<>(copy.getOrElseGet(0,()->ReactiveSeq.empty()))), createSeq(new IteratableSpliterator<>(copy.getOrElseGet(1,()->ReactiveSeq.empty())))); } @Override
@Override public Tuple2<ReactiveSeq<T>, ReactiveSeq<T>> duplicate(Supplier<Deque<T>> bufferFactory) { Seq<Iterable<T>> copy = Streams.toBufferingCopier(() -> Spliterators.iterator(copy()), 2,bufferFactory); return Tuple.tuple(createSeq(new IteratableSpliterator<>(copy.getOrElseGet(0,()->ReactiveSeq.empty()))), createSeq(new IteratableSpliterator<>(copy.getOrElseGet(1,()->ReactiveSeq.empty())))); }