limit を使わずに Stream 止め方には、トリッキーではあるが、
filter(Predicate) 、findAny() で止めるか、anyMatch(Predicate) で、止める方法がある。
Stream.iterate(1, i->i+1) .peek(System.out::println) .filter(n->n > 9) .findAny();
これの findAny() は、Optional<Integer> を返却として受け取れるので、
int ii = Stream.iterate(1, i->i+1).peek(System.out::println) .filter(n->n > 9).findAny().get();
とも書ける。
anyMatch 1つで書けばもっと簡潔だ。
Stream.iterate(1, i->i+1) .peek(System.out::println) .anyMatch(n->n > 9);
普段、目的の処理を forEach(Consumer<T>) で書いていたと思うが、
peek(Consumer<T>) で目的の処理書いていくスタイルになる。