Scalaのコレクションフレームワークにおけるコレクション操作(map, filter, reduce など)は、関数型プログラミングの考え方を活かした非常に強力な機能です。これらの操作は主に不変(immutable)コレクションに対して使われ、既存のコレクションを変更せずに、新しいコレクションを返します。以下、それぞれの代表的な操作について詳しく説明します。
1. map
map
説明:
各要素に関数を適用し、その結果を含む新しいコレクションを生成します。
シグネチャ(簡略化):
例:
2. filter
filter
説明:
指定した条件(述語)を満たす要素だけを取り出して、新しいコレクションを生成します。
シグネチャ:
例:
3. reduce / reduceLeft / reduceRight
reduce / reduceLeft / reduceRight
説明:
コレクション内の要素を1つに畳み込む(集約する)操作です。演算子は結合的である必要があります(たとえば加算や乗算)。
シグネチャ(reduce):
例:
4. fold / foldLeft / foldRight
fold / foldLeft / foldRight
説明:
reduce に似ていますが、初期値を指定できるのが特徴です。foldLeft は左から、foldRight は右から処理します。
例:
5. flatMap
flatMap
説明:
map の後に flatten(平坦化)を行う操作です。各要素をリストに変換し、それらを結合して1つのリストにします。
例:
6. foreach
foreach
説明:
各要素に対して副作用のある操作を行いますが、結果は返しません(例えばログ出力などに使用)。
例:
7. zip
zip
説明:
2つのコレクションを対応する要素ごとにペアにして、新しいコレクションを作成します。
例:
8. partition
partition
説明:
ある条件でコレクションを2つに分割します。条件を満たす要素と満たさない要素に分けてタプルで返します。
例:
まとめ
| 操作 | 用途 |
|---|---|
map |
各要素に関数を適用 |
filter |
条件を満たす要素だけを抽出 |
reduce |
要素を畳み込んで1つに集約 |
fold |
初期値を含めて畳み込む |
flatMap |
要素を展開して結合 |
foreach |
各要素に副作用のある操作 |
zip |
2つのリストをペアにする |
partition |
条件で2つのグループに分割 |
これらの操作を組み合わせることで、Scalaでは簡潔かつ安全にデータ変換・処理を行うことが可能になります。
生成日:2025/05/04