首先,感谢@OlivierGrégoire的评论。它改变了我对新知识的答案。
Spliterator为未知的大小编写您自己的
nextInts,然后您可以使用
StreamSupport#stream创建自己的流
nextInts。例如:
generateUntil(this::nextInts, List::isEmpty).forEach(list -> { //do works});import static java.util.stream.StreamSupport.stream;<T> Stream<T> generateUntil(final Supplier<T> generator, Predicate<T> stop) { long unknownSize = Long.MAX_VALUE; return stream(new AbstractSpliterator<T>(unknownSize, Spliterator.ORDERED) { @Override public boolean tryAdvance(Consumer<? super T> action) { T value = generator.get(); if (stop.test(value)) { return false; } action.accept(value); return true; } }, false);}


