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
我不太喜欢上述解决方案:如果在它之后添加一个过滤器,它只计算该特定阶段的元素,而不是进入终端操作的元素。
我想到的另一种方法是将过滤和映射的值放入列表中,然后对其进行操作,然后调用以获取计数。但是,如果收集流会导致错误,这将不起作用,而使用上述解决方案,如果适当的解决方案,我可以对到目前为止的所有已处理项目进行计数。然而,这并不是一个硬性要求。collect
list.size()
try/catch