前回前々回と2回に渡って、ストリームの基本的な使い方について説明してきました。

 とはいうものの、いざストリームを使おうとしても、なかなかすんなりとはいかないのも仕方がないところです。今までのJavaのプログラミングスタイルからすると、ストリームのスタイルは大きく異なります。特に関数を用いて処理を指定していく方法は、今までのJavaではあまりありませんでした。

 このスタイルは本連載の「Java SE 8のラムダ式はどうやって活用するか」で紹介した、高階関数を用いた関心の分離に他なりません。

 そこで、今回は様々な処理をストリームで行うことにより、ストリームを使う上での考え方を紹介していきます。

条件に合致するものに対して処理を行う

 拡張for文を使用してリスト1のような処理を書くことはありませんか。

リスト1●条件に合致した要素に対し処理を行う

List<String> elements = ……;

for (String element: elements) {
    if (要素に対する条件) {
        処理
    }
}

 リスト1では文字列のリストになっていますが、文字列に限る必要はありません。また、リストではなくセットでも構いません。コレクションに対し、条件に合致する要素だけを取り出し、何らかの処理を加えるというものです。