/** * Triplicates a Stream * Buffers intermediate values, leaders may change positions so a limit * can be safely applied to the leading stream. Not thread-safe. * <pre> * {@code * Tuple3<SequenceM<Tuple3<T1,T2,T3>>,SequenceM<Tuple3<T1,T2,T3>>,SequenceM<Tuple3<T1,T2,T3>>> Tuple3 = sequence.triplicate(); * } * </pre> */ @SuppressWarnings("unchecked") public final static <T> Tuple3<Stream<T>,Stream<T>,Stream<T>> triplicate(Stream<T> stream){ Stream<Stream<T>> its = StreamUtils.toBufferingCopier(stream.iterator(),3) .stream() .map(it -> StreamUtils.stream(it)); Iterator<Stream<T>> it = its.iterator(); return new Tuple3(it.next(),it.next(),it.next()); } /**
/** * Makes four copies of a Stream * Buffers intermediate values, leaders may change positions so a limit * can be safely applied to the leading stream. Not thread-safe. * * <pre> * {@code * * Tuple4<SequenceM<Tuple4<T1,T2,T3,T4>>,SequenceM<Tuple4<T1,T2,T3,T4>>,SequenceM<Tuple4<T1,T2,T3,T4>>,SequenceM<Tuple4<T1,T2,T3,T4>>> quad = sequence.quadruplicate(); * } * </pre> * @return */ @SuppressWarnings("unchecked") public final static <T> Tuple4<Stream<T>,Stream<T>,Stream<T>,Stream<T>> quadruplicate(Stream<T> stream){ Stream<Stream<T>> its = StreamUtils.toBufferingCopier(stream.iterator(),4) .stream() .map(it -> StreamUtils.stream(it)); Iterator<Stream<T>> it = its.iterator(); return new Tuple4(it.next(),it.next(),it.next(),it.next()); } /**
/** * Triplicates a Stream * Buffers intermediate values, leaders may change positions so a limit * can be safely applied to the leading stream. Not thread-safe. * <pre> * {@code * Triple<SequenceM<Triple<T1,T2,T3>>,SequenceM<Triple<T1,T2,T3>>,SequenceM<Triple<T1,T2,T3>>> triple = sequence.triplicate(); * } * </pre> */ @SuppressWarnings("unchecked") public final Triple<SequenceM<T>,SequenceM<T>,SequenceM<T>> triplicate(){ Stream<SequenceM<T>> its = StreamUtils.toBufferingCopier(monad.iterator(),3) .stream() .map(it -> StreamUtils.stream(it)) .map(stream -> new SequenceM<>(stream)); return new Triple(its.collect(Collectors.toList())); } /**
/** * Makes four copies of a Stream * Buffers intermediate values, leaders may change positions so a limit * can be safely applied to the leading stream. Not thread-safe. * * <pre> * {@code * * Quadruple<SequenceM<Quadruple<T1,T2,T3,T4>>,SequenceM<Quadruple<T1,T2,T3,T4>>,SequenceM<Quadruple<T1,T2,T3,T4>>,SequenceM<Quadruple<T1,T2,T3,T4>>> quad = sequence.quadruplicate(); * } * </pre> * @return */ @SuppressWarnings("unchecked") public final Quadruple<SequenceM<T>,SequenceM<T>,SequenceM<T>,SequenceM<T>> quadruplicate(){ Stream<SequenceM<T>> its = StreamUtils.toBufferingCopier(monad.iterator(),4) .stream() .map(it -> StreamUtils.stream(it)) .map(stream -> new SequenceM<>(stream)); return new Quadruple(its.collect(Collectors.toList())); } /**