無限Stream を limit でなく別の方法で STOP させる。

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>) で目的の処理書いていくスタイルになる。