まだまだプログラミング初心者の自分がJava製造を行っている際に使用したり使えると思った記述を備忘録的に綴るシリーズを書いていこうと思います。
あくまで備忘録的なものなのでほぼ自分用になる予定です。
初投稿となる今回、まずはものすごく基礎的な所から書いてみて超絶基本的な事をおぼえておこう、みたいな感じになります。
まずはよくあるFor文をStreamに置き換える記述
以下のような適当な数字を持たせたリストがあるとする。
List<Integer> iList = Arrays.asList(1,4,5,7,14,15,77,98,100,103);
ココから偶数のみを出力させたい。
以下は偶数のみを出力させる何の変哲もない拡張For文でのコード。
for (Integer i : iList) {
if (i % 2 == 0) {
System.out.println(i);
}
}
出力結果
4
14
98
100
上記をStreamに置き換えると…
iList.stream().filter(i -> i % 2 == 0).forEach(i -> System.out.println(i));
出力結果
4
14
98
100
ここでStreamで何をしているのかざっくり書くと
はじめの
iList.stream()
で、streamの取得をし
.filter(i -> i % 2 == 0)
で中間操作と呼ばれる操作を行い
.forEach(i -> System.out.println(i));
で終端操作と呼ばれる最終操作を行っている。
この「中間操作」⇒「終端操作」という流れがStreamの基本になるので、
これだけ覚えておけば細かい書き方を多少忘れてもググりやすい。
で、上記のFor文とStreamは御覧の通り処理結果が同じではあるが詳しく言うと実際にやっていることは違うみたい。
お馴染みのFor文の場合
iListの要素文だけiListをループさせ、もし2で割り切れる値を持っている要素なら出力するよ、そうでないなら出力せず次の要素にいくよ!といった処理。
Streamの場合
中間操作に使われている「filterメソッド」でフィルタリングする条件を指定し、
「forEachメソッド」でフィルタリングされた要素を一つずつ取り出して実行していく!(今回でいうなら出力)といった処理。
この中間操作と終端操作には色んな種類があり、その組み合わせによって様々な書きたい処理を行えるようになる。
よく使うのは中間操作の「mapメソッド」(変換)とか終端操作「Collect」(リスト生成)とか。
どんな操作メソッドをどんな時にどんな使い方をするかは次に書こうと思います。