この記事では、ストリーム操作における処理の流れと、peek()
を用いたデバッグ方法について説明します。
ストリーム操作の正しい処理イメージ
for(String str:list){
method1(str);
method2(str);
method3(str);
}
ストリーム操作の誤った処理イメージ
for(String str:list){
method1(str);
}
for(String str:list){
method2(str);
}
for(String str:list){
method3(str);
}
ストリーム操作の途中経過を知りたい、つまりデバッグしたいときはpeek()
を用いると何が起こっているのかを可視化することができます。
Java
public static void main(String[] args) {
Arrays.asList(1,2,3).stream()
.map(x -> x * 2)
.peek(x -> System.out.println("peek文による出力1 :" + x))
.map(x -> x * 4)
.peek(x -> System.out.println("peek文による出力2 :" + x))
.sorted()
.forEach(x -> System.out.println("forEach文による出力:" + x));
}
【実行結果】
peek文による出力1 :2
peek文による出力2 :8
peek文による出力1 :4
peek文による出力2 :16
peek文による出力1 :6
peek文による出力2 :24
forEach文による出力:8
forEach文による出力:16
forEach文による出力:24
上記の例ではsorted()
までの処理は要素が1個ずつ順番に流れてきて、sorted()
が実行されるとになると、全部の要素が流れてきた後で、並び替えをして出力していることがわかります。
試しに、sortedしない例が以下。
Java
public static void main(String[] args) {
Arrays.asList(1,2,3).stream()
.map(x -> x * 2)
.peek(x -> System.out.println("peek文による出力1 :" + x))
.map(x -> x * 4)
.peek(x -> System.out.println("peek文による出力2 :" + x))
.forEach(x -> System.out.println("forEach文による出力:" + x));
}
【実行結果】
peek文による出力1 :2
peek文による出力2 :8
forEach文による出力:8
peek文による出力1 :4
peek文による出力2 :16
forEach文による出力:16
peek文による出力1 :6
peek文による出力2 :24
forEach文による出力:24
以上で記事の解説はお終い!
もっとJavaやSpringを勉強したい方にはUdemyがオススメ!同僚に差をつけよう!