为了讨论起见,让我重新格式化您的示例:
long runCount = 0L;
myStream.stream()
    .filter(...)
    .forEach(item -> { 
        foo();
        bar();
        runCount++; 
    });
System.out.println("The lambda ran " + runCount + " times");
如果您确实需要在Lambda中递增计数器,则通常的做法是将计数器设为AtomicInteger或AtomicLong,然后在其上调用递增方法之一。
您可以使用单元素int或long数组,但是如果流并行运行,则将具有竞争条件。
但是请注意,流以结尾forEach,这意味着没有返回值。您可以将更forEach改为peek,使项目通过,然后对它们进行计数:
long runCount = myStream.stream()
    .filter(...)
    .peek(item -> { 
        foo();
        bar();
    })
    .count();
System.out.println("The lambda ran " + runCount + " times");
这好一些,但仍然有些奇怪。原因是forEach并且peek只能通过副作用来完成他们的工作。Java 8的新兴功能风格是避免副作用。通过将计数器的增量提取到count流中的操作中,我们做了一些工作。其他典型的副作用是将项目添加到集合中。通常这些可以通过使用收集器来替换。但是,在不知道您要实际执行什么工作的情况下,我无法提出更具体的建议。