public static <T> ReactiveSeq<T> fromIterable(Iterable<T> iterable){ if(iterable instanceof ReactiveStreamX) return (ReactiveSeq<T>)iterable; return syncStream(new IterableSourceOperator<T>(iterable)); } public static <T> ReactiveSeq<T> fromSpliterator(Spliterator<T> spliterator){
@Override public <U> ReactiveSeq<U> unitIterable(Iterable<U> iterable) { return createSeq(new IterableSourceOperator<U>(iterable)); }
@Override @SuppressWarnings("unchecked") public Tuple4<ReactiveSeq<T>, ReactiveSeq<T>, ReactiveSeq<T>, ReactiveSeq<T>> quadruplicate() { Seq<Iterable<T>> copy = Streams.toBufferingCopier(() -> iterator(), 4); return Tuple.tuple(createSeq(new IterableSourceOperator<>(copy.getOrElseGet(0,()->Arrays.asList())), SYNC), createSeq(new IterableSourceOperator<>(copy.getOrElseGet(1,()->Arrays.asList())), SYNC), createSeq(new IterableSourceOperator<>(copy.getOrElseGet(2,()->Arrays.asList())), SYNC), createSeq(new IterableSourceOperator<>(copy.getOrElseGet(3,()->Arrays.asList())), SYNC)); }
@Override @SuppressWarnings("unchecked") public Tuple4<ReactiveSeq<T>, ReactiveSeq<T>, ReactiveSeq<T>, ReactiveSeq<T>> quadruplicate(Supplier<Deque<T>> bufferFactory) { Seq<Iterable<T>> copy = Streams.toBufferingCopier(() -> iterator(), 4, bufferFactory); return Tuple.tuple(createSeq(new IterableSourceOperator<>(copy.getOrElseGet(0,()->Arrays.asList())), SYNC), createSeq(new IterableSourceOperator<>(copy.getOrElseGet(1,()->Arrays.asList())), SYNC), createSeq(new IterableSourceOperator<>(copy.getOrElseGet(2,()->Arrays.asList())), SYNC), createSeq(new IterableSourceOperator<>(copy.getOrElseGet(3,()->Arrays.asList())), SYNC)); }
@Override @SuppressWarnings("unchecked") public Tuple3<ReactiveSeq<T>, ReactiveSeq<T>, ReactiveSeq<T>> triplicate() { Seq<Iterable<T>> copy = Streams.toBufferingCopier(() -> iterator(), 3); return Tuple.tuple(createSeq(new IterableSourceOperator<>(copy.getOrElseGet(0,()->Arrays.asList())), SYNC), createSeq(new IterableSourceOperator<>(copy.getOrElseGet(1,()->Arrays.asList())), SYNC), createSeq(new IterableSourceOperator<>(copy.getOrElseGet(2,()->Arrays.asList())), SYNC)); }
@Override @SuppressWarnings("unchecked") public Tuple3<ReactiveSeq<T>, ReactiveSeq<T>, ReactiveSeq<T>> triplicate(Supplier<Deque<T>> bufferFactory) { Seq<Iterable<T>> copy = Streams.toBufferingCopier(() -> iterator(), 3, bufferFactory); return Tuple.tuple(createSeq(new IterableSourceOperator<>(copy.getOrElseGet(0,()->Arrays.asList())), SYNC), createSeq(new IterableSourceOperator<>(copy.getOrElseGet(1,()->Arrays.asList())), SYNC), createSeq(new IterableSourceOperator<>(copy.getOrElseGet(2,()->Arrays.asList())), SYNC)); }
@Override protected <R> ReactiveSeq<R> createSeq(Stream<R> stream) { if (stream instanceof ReactiveSeq) return (ReactiveSeq) stream; if (stream instanceof Iterable) return new ReactiveStreamX<>(new IterableSourceOperator<>((Iterable<R>) stream)); return new ReactiveStreamX<>(new SpliteratorToOperator<>(stream.spliterator())); }
@Override public Tuple2<ReactiveSeq<T>, ReactiveSeq<T>> duplicate(Supplier<Deque<T>> bufferFactory) { Seq<Iterable<T>> copy = Streams.toBufferingCopier(() -> iterator(), 2, bufferFactory); return Tuple.tuple(createSeq(new IterableSourceOperator<>(copy.getOrElseGet(0,()->Arrays.asList())), SYNC), createSeq(new IterableSourceOperator<>(copy.getOrElseGet(1,()->Arrays.asList())), SYNC)); }
@Override public Tuple2<ReactiveSeq<T>, ReactiveSeq<T>> duplicate() { Seq<Iterable<T>> copy = Streams.toBufferingCopier(() -> iterator(), 2); return Tuple.tuple(createSeq(new IterableSourceOperator<>(copy.getOrElseGet(0,()->Arrays.asList())), SYNC), createSeq(new IterableSourceOperator<>(copy.getOrElseGet(1,()->Arrays.asList())), SYNC)); }
public Operator<Integer> createThree(){ List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9); return new MapOperator<Seq<Integer>,Integer>(new SlidingOperator(new IterableSourceOperator(list), i->i,3,3),i->i.getOrElse(0,-1)); } public Operator<Integer> createTwoAndError(){
public Operator<Integer> createThree(){ List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9); return new MapOperator<Vector<Integer>,Integer>(new GroupingOperator(new IterableSourceOperator(list), ()->Vector.empty(),i->i,3),i->i.getOrElse(0,-1)); } public Operator<Integer> createTwoAndError(){
@Override public ReactiveSeq<T> cycle() { ReactiveSeq<T> cycling = collectAll(Collectors.toList()) .map(s -> Spouts.fromIterable(s).cycle(Long.MAX_VALUE)) .flatMap(i -> i); return createSeq(new IterableSourceOperator<T>(cycling), SYNC); }
public Operator<Integer> createThree(){ List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9); return new MapOperator<Vector<Integer>,Integer>(new GroupedByTimeAndSizeOperator(new IterableSourceOperator(list), ()->Vector.empty(),i->i,3, TimeUnit.SECONDS,3),i->i.getOrElse(0,-1)); } public Operator<Integer> createTwoAndError(){
@Override public <U> ReactiveSeq<Tuple2<T, U>> zipWithStream(Stream<? extends U> other) { Operator<U> right; if (other instanceof ReactiveStreamX) { right = ((ReactiveStreamX<U>) other).source; } else if (other instanceof Iterable) { right = new IterableSourceOperator<U>(((Iterable<U>) other)); } else { //not replayable right = new SpliteratorToOperator<U>(((Stream<U>) other).spliterator()); } ReactiveStreamX<Tuple2<T, U>> res = createSeq(new ZippingOperator<>(source, right, Tuple::tuple)); if (this.async == SYNC) { //zip could recieve an asyncrhonous Stream so we force onto the async path return res.withAsync(BACKPRESSURE); } return res; }
public static <T> ReactiveSeq<T> fromIterable(Iterable<T> iterable){ if(iterable instanceof ReactiveStreamX) return (ReactiveSeq<T>)iterable; return syncStream(new IterableSourceOperator<T>(iterable)); } public static <T> ReactiveSeq<T> fromSpliterator(Spliterator<T> spliterator){
@Override public <U> ReactiveSeq<U> unitIterable(Iterable<U> iterable) { return createSeq(new IterableSourceOperator<U>(iterable)); }
@Override @SuppressWarnings("unchecked") public Tuple4<ReactiveSeq<T>, ReactiveSeq<T>, ReactiveSeq<T>, ReactiveSeq<T>> quadruplicate(Supplier<Deque<T>> bufferFactory) { Seq<Iterable<T>> copy = Streams.toBufferingCopier(() -> iterator(), 4, bufferFactory); return Tuple.tuple(createSeq(new IterableSourceOperator<>(copy.getOrElseGet(0,()->Arrays.asList())), SYNC), createSeq(new IterableSourceOperator<>(copy.getOrElseGet(1,()->Arrays.asList())), SYNC), createSeq(new IterableSourceOperator<>(copy.getOrElseGet(2,()->Arrays.asList())), SYNC), createSeq(new IterableSourceOperator<>(copy.getOrElseGet(3,()->Arrays.asList())), SYNC)); }
@Override @SuppressWarnings("unchecked") public Tuple3<ReactiveSeq<T>, ReactiveSeq<T>, ReactiveSeq<T>> triplicate() { Seq<Iterable<T>> copy = Streams.toBufferingCopier(() -> iterator(), 3); return Tuple.tuple(createSeq(new IterableSourceOperator<>(copy.getOrElseGet(0,()->Arrays.asList())), SYNC), createSeq(new IterableSourceOperator<>(copy.getOrElseGet(1,()->Arrays.asList())), SYNC), createSeq(new IterableSourceOperator<>(copy.getOrElseGet(2,()->Arrays.asList())), SYNC)); }
@Override @SuppressWarnings("unchecked") public Tuple4<ReactiveSeq<T>, ReactiveSeq<T>, ReactiveSeq<T>, ReactiveSeq<T>> quadruplicate() { Seq<Iterable<T>> copy = Streams.toBufferingCopier(() -> iterator(), 4); return Tuple.tuple(createSeq(new IterableSourceOperator<>(copy.getOrElseGet(0,()->Arrays.asList())), SYNC), createSeq(new IterableSourceOperator<>(copy.getOrElseGet(1,()->Arrays.asList())), SYNC), createSeq(new IterableSourceOperator<>(copy.getOrElseGet(2,()->Arrays.asList())), SYNC), createSeq(new IterableSourceOperator<>(copy.getOrElseGet(3,()->Arrays.asList())), SYNC)); }
@Override @SuppressWarnings("unchecked") public Tuple3<ReactiveSeq<T>, ReactiveSeq<T>, ReactiveSeq<T>> triplicate(Supplier<Deque<T>> bufferFactory) { Seq<Iterable<T>> copy = Streams.toBufferingCopier(() -> iterator(), 3, bufferFactory); return Tuple.tuple(createSeq(new IterableSourceOperator<>(copy.getOrElseGet(0,()->Arrays.asList())), SYNC), createSeq(new IterableSourceOperator<>(copy.getOrElseGet(1,()->Arrays.asList())), SYNC), createSeq(new IterableSourceOperator<>(copy.getOrElseGet(2,()->Arrays.asList())), SYNC)); }