Scalaのコレクション操作は、データを処理する際に効率的であり、コードの可読性を向上させるための便利な方法です。イテレーション(ループ)を使わずに、コレクション操作を活用してコードを効率的に書く方法を紹介します。
map 要素の変換
map
関数を使用すると、コレクション内の各要素を変換できます。
以下はリストの値を2倍にするコードです。
val numbers = List(1, 2, 3, 4, 5)
val doubled = numbers.map(_ * 2) // 各要素を2倍に
filter 要素のフィルタリング
filter
関数を使用すると、コレクション内の条件に合致する要素だけを抽出できます。
以下はリストの値の内、偶数のみを抽出するコードです。
val numbers = List(1, 2, 3, 4, 5)
val evenNumbers = numbers.filter(_ % 2 == 0) // 偶数のみ抽出
reduce 要素の集計
reduce
関数を使用すると、コレクション内の要素を集計できます。
以下はコレクション内の要素を合計するコードです。
val numbers = List(1, 2, 3, 4, 5)
val sum = numbers.reduce(_ + _) // 合計
チェーン操作
ここでは、紹介した”map”、”filter”、”reduce”を組み合わせ、「リスト内の偶数要素のみ2倍し集計する」処理を紹介します。その際に①イテレーションを使った従来のJava的なコードと、②コレクション操作を使ったScala的なコードの2種類を紹介します。
①イテレーションを使用したコード
val numbers = List(1, 2, 3, 4, 5)
var sum = 0
for (number <- numbers) {
if (number % 2 == 0) { // 偶数のみ2倍して加算
sum += number * 2
}
}
②コレクション操作を使用したコード
val numbers = List(1, 2, 3, 4, 5)
// チェーン操作
val result = numbers.filter(_ % 2 == 0).map(_ * 2).reduce(_ + _)
まとめ
コレクション操作を使用したScalaの書き方は、コードが簡潔で読みやすく、バグのリスクが低いという利点があります。また、内部的に処理が最適化されるためパフォーマンスが向上します。
Scalaの強みを活かすため、積極的にコレクション操作を使用しましょう。