我想知道是否有一种方法可以添加对方法takeWhile()的条件进行测试的流的最后一个元素。我相信我想实现类似于RxJava的takeUntil()方法的功能。

我猜没有直接的方法可以做到这一点(如果我弄错了,请纠正我),但是我想知道是否有适当的解决方法可以实现我现在所知道的。

我搜索了整个Stackoverflow,但几乎没有成功。如果您认为有可以解决我的问题的线程,我当然希望看到它。

如果查看下面的代码的peek(),将会看到数字5是根据takeWhile()条件检查的,但是它永远不会到达forEach()中:

IntStream.of(1, 3, 2, 5, 4, 6)
        .peek(foo -> System.out.println("Peek: " + foo))
        .takeWhile(n -> n < 5)
        .forEach(bar -> System.out.println("forEach: " + bar));

预期结果是针对根据takeWhile的条件检查的最后一个元素到达forEach的System.out::println。在这种情况下为5。

谢谢大家!

最佳答案

使用普通的流API并没有便捷的方法。 an ugly way中是可能的(您需要调整此实现,这只是Java 8的“反向移植”的普通takeWhile)。

This guy编写了一个流扩展库,其中包含 takeWhileInclusive

用法示例:

IntStreamEx.of(1, 3, 2, 5, 4, 6)
    .peek(foo -> System.out.println("Peek: " + foo))
    .takeWhileInclusive(n -> n < 5)
    .forEach(bar -> System.out.println("forEach: " + bar));

10-06 15:03