Java Gold合格へ向けて
黒本の第4章は『ストリームAPI』、これをさらに細分化すると下記の9つに分かれる(黒本より抜粋)。
- java.util.Optionalクラス
- ストリームAPI
- ストリーム・パイプラインと中間操作、終端操作
- java.util.stream.BaseStreamとサブインタフェース
- 並列ストリーム
- java.util.Collectionインタフェース
- リダクション操作
- java.util.stream.Collectorインタフェース
- java.util.stream.Collectorsクラス
そもそもここでいうところのストリームAPIとは、Java SE8でコレクションをより扱いやすくするための拡張のことを指す。メソッドとラムダ式を用いて簡潔に記述することができるため、それらインタフェースを覚えることも大事になってくる。そんなストリームAPIの利用ケースとしては、下記の4つが紹介されている。
- コレクションや配列の全要素を同じように変換する場合
- コレクションや配列の要素の合計や平均といった統計を取る場合
- コレクションや配列の要素を何らかの条件でグルーピングする場合
- コレクションや配列の要素から条件に合ったデータを検索する場合
また、項番3「ストリーム・パイプラインと中間操作、終端操作」でいう中間操作は取り出した要素に加える処理のことを、終端操作は中間操作を終えた要素の集合に対して行う最終の処理のことを、ストリーム・パイプラインは0個以上の中間操作と1つの終端操作を組み合わせたもののことを、それぞれ指す。
ストリームAPIの使い方については、「メソッドとラムダ式を用いて簡潔に記述することができる」という点から、別の章で勉強しているため、それほど重きを置いて学ぶ必要はないと判断。それぞれ用意されているメソッドの機能、具体的には①入力、②出力、③処理、そして④中間操作 or 終端操作、といった4つの観点で整理して覚えることが求められると考える。とはいえ中間操作であれば、②出力がストリームであることは確定(値に対して処理を実行しストリームを返却する)。終端操作であれば、①入力のストリームは確定している(受け取ったストリームに対して処理を実行し何らかのデータを返却する)。確定していない中間操作の①入力、終端操作の②出力については、関数型インタフェースで引数のメソッド次第で決まるため注意する必要がある。 黒本にまとめられている中間操作、終端操作は下記の通り。
メソッド名 | 概要 | 中間操作 or 終端操作 |
---|---|---|
distinct | 要素の重複を除いたストリームを戻す | 中間操作 |
filter | 引数に指定した条件に一致する要素だけで構成されるストリームを戻す | 中間操作 |
limit | ストリームの要素を、指定された数に切る詰めた結果のストリームを戻す | 中間操作 |
map | 指定された関数を要素に適用した結果のストリームを戻す | 中間操作 |
peek | 新しい結果のストリームを生成し、指定された関数を適用して戻す | 中間操作 |
skip | 引数で指定した最初のn個の要素を破棄し、残った要素で構成されるストリームを戻す | 中間操作 |
sorted | このストリームの要素を自然順序に従ってソートした結果から構成されるストリームを戻す | 中間操作 |
allMatch | ストリーム内のすべての要素が条件に一致するかどうかを調べる | 終端操作 |
anyMatch | ストリーム内のいずれかの要素が条件に一致するかどうかを調べる | 終端操作 |
collect | ストリームの要素を持つコレクションを戻す | 終端操作 |
count | ストリーム内の要素を数える | 終端操作 |
findAny | ストリーム内に要素が残っているかどうかの結果を持つOptionalを戻す | 終端操作 |
findFirst | ストリーム内の最初の要素を持ったOptionalを戻す | 終端操作 |
forEach | ストリーム内の要素を使って繰り返し処理を実行する | 終端操作 |
max | ストリーム内の最大の要素を戻す | 終端操作 |
min | ストリーム内の最小の要素を戻す | 終端操作 |
noneMatch | ストリーム内の要素で条件に一致するものがないかどうかを調べる | 終端操作 |
reduce | ストリーム内の要素を累積的に結合していくリダクション処理を実行する | 終端操作 |
toArray | ストリームの要素を含む配列を戻す | 終端操作 |
対策に向けて
第4章の対策としては、下記の通りの3段階での学習を考えている。
- 中間操作のメソッドを実装・暗記
- 終端操作のメソッドを実装・暗記 3.. 中間操作と終端操作を組み合わせて実装・暗記
終端操作についてはリダクション処理も勉強しつつ、内容を整理していきたい。