Java の Stream において pipeline を途中で止める方法
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();
用途としては、前半で全要素から得た結果を後半で使いたいと思っています。
何か良い手はないでしょうか。