Java 8 流:计算进入终端操作的所有元素
我想知道是否有更好(或只是另一种)方法来获取进入流终端操作的所有项目的计数,而不是以下内容:
Stream<T> stream = ... // given as parameter
AtomicLong count = new AtomicLong();
stream.filter(...).map(...)
.peek(t -> count.incrementAndGet())
其中为我提供了该阶段已处理项目的实际计数。count.get()
我故意跳过了终端操作,因为它可能会在 , 或 之间切换。我确实已经知道.count,但似乎只有当我用a交换a并使用as终端操作时,它才能正常工作。但在我看来,这似乎被误用了。.forEach.reduce.collect.forEach.map.count.map
我不太喜欢上述解决方案:如果在它之后添加一个过滤器,它只计算该特定阶段的元素,而不是进入终端操作的元素。
我想到的另一种方法是将过滤和映射的值放入列表中,然后对其进行操作,然后调用以获取计数。但是,如果收集流会导致错误,这将不起作用,而使用上述解决方案,如果适当的解决方案,我可以对到目前为止的所有已处理项目进行计数。然而,这并不是一个硬性要求。collectlist.size()try/catch