/** * skip elements in Stream until Predicate holds true * <pre> * {@code StreamUtils.skipUntil(Stream.of(4,3,6,7),i->i==6).collect(Collectors.toList()) * // [6,7] * }</pre> * @param stream Stream to skip elements from * @param predicate to apply * @return Stream with elements skipped */ public static <U> Stream<U> skipUntil(Stream<U> stream,Predicate<? super U> predicate){ return skipWhile(stream,predicate.negate()); } public static <U> Stream<U> skipLast(Stream<U> stream,int num){
/** * skip elements in Stream until Predicate holds true * <pre> * {@code StreamUtils.skipUntil(Stream.of(4,3,6,7),i->i==6).collect(Collectors.toList()) * // [6,7] * }</pre> * @param stream Stream to skip elements from * @param predicate to apply * @return Stream with elements skipped */ public static <U> Stream<U> skipUntil(Stream<U> stream,Predicate<? super U> predicate){ return skipWhile(stream,predicate.negate()); } /**
/** * * * <pre> * {@code * assertThat(anyM(Stream.of(4,3,6,7)).asSequence().sorted().skipWhile(i->i<6).toList(),equalTo(Arrays.asList(6,7))); * } * </pre> * * @param p * Predicate to skip while true * @return Monad converted to Stream with elements skipped while predicate * holds */ public final SequenceM<T> skipWhile(Predicate<? super T> p) { return StreamUtils.sequenceM(StreamUtils.skipWhile(stream, p),reversable); }
/** * * * <pre> * {@code * assertThat(anyM(Stream.of(4,3,6,7)).asSequence().sorted().skipWhile(i->i<6).toList(),equalTo(Arrays.asList(6,7))); * } * </pre> * * @param p * Predicate to skip while true * @return Monad converted to Stream with elements skipped while predicate * holds */ public final SequenceM<T> skipWhile(Predicate<? super T> p) { return monad(StreamUtils.skipWhile(monad, p)); }
/** * 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)); } /**