Java の Stream において、pipeline を途中で止める方法を探しています。

例えば以下のようにすると、

IntStream stream = IntStream.of(1, 2, 3);
stream.peek(i -> System.out.println("1st: " + i))
    .peek(i -> System.out.println("2nd: " + i))
    .peek(i -> System.out.println("3rd: " + i))
    .sum();

結果は以下の通りで、

1st: 1
2nd: 1
3rd: 1
1st: 2
2nd: 2
3rd: 2
1st: 3
2nd: 3
3rd: 3

各要素が順に pipeline で処理されているのがわかります。

これを 1st の peek() の後で堰き止め、

1st: 1
1st: 2
1st: 3
2nd: 1
3rd: 1
2nd: 2
3rd: 2
2nd: 3
3rd: 3

といった感じにできないかと考えています。

以下のように sorted() を使うとまさにその通りの結果が得られるのですが、
sort はコストが高そうで使いたくありません。

IntStream stream = IntStream.of(1, 2, 3);
stream.peek(i -> System.out.println("1st: " + i))
    .sorted()
    .peek(i -> System.out.println("2nd: " + i))
    .peek(i -> System.out.println("3rd: " + i))
    .sum();

用途としては、前半で全要素から得た結果を後半で使いたいと思っています。

何か良い手はないでしょうか。