首先,感谢@OlivierGrégoire的评论.它改变了我对新知识的回答.
为未知大小的nextInts编写自己的Spliterator,然后可以使用StreamSupport#stream为nextInts创建流.例如:
generateUntil(this::nextInts, List::isEmpty).forEach(list -> {
//do works
});
import static java.util.stream.StreamSupport.stream;
Stream generateUntil(final Supplier generator, Predicate stop) {
long unknownSize = Long.MAX_VALUE;
return stream(new AbstractSpliterator(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);
}