有没有办法用谓词停止Stream.iterate()?

DIB*_*its 4 java java-8 java-stream

在网络中,我发现只有一种方法可以停止迭代方法.通过使用limit()函数.但是,这会迭代一个混合的循环.我想用来停止一个谓词.

...
Stream.iterate(0, i -> i*2).while(i -> i < MAX)
...
Run Code Online (Sandbox Code Playgroud)

有没有办法用Streams做到这一点?

更新1:使用Java 8

Nam*_*man 10

使用Java-9或更高版本,一种方法是使用Stream.takeWhile:

Stream.iterate(1, i -> i * 2) // notice identity value in seed
      .takeWhile(i -> i < MAX)
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用 Stream.iterate

Stream.iterate(1, i -> i < MAX, i -> i * 2)
Run Code Online (Sandbox Code Playgroud)

  • 也许值得一提的是,这是在Java 9中添加的. (3认同)