/** * Take elements from a Stream until the predicate holds * <pre> * {@code StreamUtils.limitUntil(Stream.of(4,3,6,7),i->i==6).collect(Collectors.toList()); * //[4,3] * } * </pre> * @param stream * @param predicate * @return */ public static <U> Stream<U> limitUntil(Stream<U> stream,Predicate<? super U> predicate){ return limitWhile(stream,predicate.negate()); } /**
/** * Take elements from a Stream until the predicate holds * <pre> * {@code StreamUtils.limitUntil(Stream.of(4,3,6,7),i->i==6).collect(Collectors.toList()); * //[4,3] * } * </pre> * @param stream * @param predicate * @return */ public static <U> Stream<U> limitUntil(Stream<U> stream,Predicate<? super U> predicate){ return limitWhile(stream,predicate.negate()); } /**
/** * * * <pre> * {@code assertThat(anyM(Stream.of(4,3,6,7)).asSequence().sorted().limitWhile(i->i<6).toList(),equalTo(Arrays.asList(3,4)));} * </pre> * * @param p * Limit while predicate is true * @return Monad converted to Stream with limited elements */ public final SequenceM<T> limitWhile(Predicate<? super T> p) { return StreamUtils.sequenceM(StreamUtils.limitWhile(stream,p),reversable); }
/** * * * <pre> * {@code assertThat(anyM(Stream.of(4,3,6,7)).asSequence().sorted().limitWhile(i->i<6).toList(),equalTo(Arrays.asList(3,4)));} * </pre> * * @param p * Limit while predicate is true * @return Monad converted to Stream with limited elements */ public final SequenceM<T> limitWhile(Predicate<? super T> p) { return monad(StreamUtils.limitWhile(monad,p)); }
/** * Repeat in a Stream while specified predicate holds * <pre> * {@code * int count =0; * assertThat(StreamUtils.cycleWhile(Stream.of(1,2,2) ,next -> count++<6 ) .collect(Collectors.toList()),equalTo(Arrays.asList(1,2,2,1,2,2))); * } * </pre> * @param predicate * repeat while true * @return Repeating Stream */ public final static <T> Stream<T> cycleWhile(Stream<T> stream,Predicate<? super T> predicate) { return StreamUtils.limitWhile(StreamUtils.cycle(stream),predicate); }
/** * Repeat in a Stream while specified predicate holds * <pre> * {@code * int count =0; * assertThat(StreamUtils.cycleWhile(Stream.of(1,2,2) ,next -> count++<6 ) .collect(Collectors.toList()),equalTo(Arrays.asList(1,2,2,1,2,2))); * } * </pre> * @param predicate * repeat while true * @return Repeating Stream */ public final static <T> Stream<T> cycleWhile(Stream<T> stream,Predicate<? super T> predicate) { return StreamUtils.limitWhile(StreamUtils.cycle(stream),predicate); }
/** * Split stream at point where predicate no longer holds * <pre> * {@code * SequenceM.of(1, 2, 3, 4, 5, 6).splitBy(i->i<4) * * //SequenceM[1,2,3] SequenceM[4,5,6] * } * </pre> */ public final static <T> Tuple2<Stream<T>,Stream<T>> splitBy(Stream<T> stream,Predicate<T> splitter){ Tuple2<Stream<T>,Stream<T>> Tuple2 = duplicate(stream); return new Tuple2(limitWhile(Tuple2.v1,splitter),skipWhile(Tuple2.v2,splitter)); } /**