 <p>You'd need to use a different list for each checkpoint.</p> <p>Normally I would not recommend using stream operations to mutate state in this way, but for debugging purposes I think it's ok. In fact, as @BrianGoetz points out below, debugging was the reason why <code>peek</code> was added.</p> <pre><code>int[] nums = {3, -4, 8, 4, -2, 17, 9, -10, 14, 6, -12}; List&lt;Integer&gt; checkPoint1 = new ArrayList&lt;&gt;(); List&lt;Integer&gt; checkPoint2 = new ArrayList&lt;&gt;(); List&lt;Integer&gt; checkPoint3 = new ArrayList&lt;&gt;(); List&lt;Integer&gt; checkPoint4 = new ArrayList&lt;&gt;(); int sum = Arrays.stream(nums) .peek(checkPoint1::add) .map(n -&gt; Math.abs(n)) .peek(checkPoint2::add) .filter(n -&gt; n % 2 == 0) .peek(checkPoint3::add) .distinct() .peek(checkPoint4::add) .sum(); System.out.println(checkPoint1); System.out.println(checkPoint2); System.out.println(checkPoint3); System.out.println(checkPoint4); System.out.println(sum); </code></pre> <p>Output:</p> <pre><code>[3, -4, 8, 4, -2, 17, 9, -10, 14, 6, -12] [3, 4, 8, 4, 2, 17, 9, 10, 14, 6, 12] [4, 8, 4, 2, 10, 14, 6, 12] [4, 8, 2, 10, 14, 6, 12] 56 </code></pre>