0Pricing
Scala for Backend Engineering & Functional Programming · レッスン

変換

map、filter、flatMap です。

「変換」はCoddyKit上の無料Scala for Backend Engineering & Functional Programmingレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはScala for Backend Engineering & Functional Programming学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Scala for Backend Engineering & Functional Programmingコースには全4レッスンが含まれています。

コレクションを変換する

Scalaのコレクションはデフォルトでイミュータブルです。コレクションを変更する代わりに、map、filter、flatMapなどのメソッドを使って新しいコレクションに変換します。

object Main {
  def main(args: Array[String]): Unit = {
    val nums = List(1, 2, 3, 4)
    val doubled = nums.map(_ * 2)
    println(nums)
    println(doubled)
  }
}

map:すべての要素を変換する

mapは各要素に関数を適用し、同じサイズの新しいコレクションを返します。要素の型は変わる場合があります。

object Main {
  def main(args: Array[String]): Unit = {
    val words = List("scala", "rocks")
    val lengths = words.map(_.length)
    println(lengths)
  }
}

アンダースコアによる省略記法

アンダースコア_は、1つの関数パラメーターを表す省略記法です。_ * 2はx => x * 2を意味します。単純な変換を簡潔に記述できます。

object Main {
  def main(args: Array[String]): Unit = {
    val nums = List(10, 20, 30)
    println(nums.map(_ + 1))
    println(nums.map(x => x + 1))
  }
}

filter:条件に一致する要素を残す

filterは、述語がtrueを返す要素だけを残します。結果は元のコレクションより小さくなる場合があります。

object Main {
  def main(args: Array[String]): Unit = {
    val nums = (1 to 10).toList
    val evens = nums.filter(_ % 2 == 0)
    println(evens)
  }
}

filterNot:反対の操作

filterNotは、述語がfalseになる要素を残します。filterの補集合を求める操作です。

object Main {
  def main(args: Array[String]): Unit = {
    val nums = List(1, 2, 3, 4, 5)
    println(nums.filterNot(_ % 2 == 0))
  }
}

flatMap:変換してから平坦化する

flatMapは、各要素についてコレクションを返す関数を適用し、その結果を平坦化して1つのコレクションにします。

object Main {
  def main(args: Array[String]): Unit = {
    val words = List("ab", "cd")
    val chars = words.flatMap(_.toList)
    println(chars)
  }
}

mapとflatMapの違い

関数がコレクションを返す場合、mapではネストしたコレクションになり、flatMapでは平坦なコレクションになります。必要な形に応じて選択してください。

object Main {
  def main(args: Array[String]): Unit = {
    val nums = List(1, 2, 3)
    println(nums.map(n => List(n, n)))
    println(nums.flatMap(n => List(n, n)))
  }
}

Optionに対するflatMap

Optionのリストに対してflatMapを使うと、Noneの値が取り除かれ、Someの値が取り出されます。フィルタリングと変換を同時に行える便利な方法です。

object Main {
  def main(args: Array[String]): Unit = {
    val raw = List("1", "x", "3", "y")
    val parsed = raw.flatMap(_.toIntOption)
    println(parsed)
  }
}

collect:フィルターとmapを組み合わせる

collectは部分関数を受け取り、その関数が定義されている要素だけを残して変換します。filterとmapを1回の処理にまとめたものです。

object Main {
  def main(args: Array[String]): Unit = {
    val mixed: List[Any] = List(1, "two", 3, "four", 5)
    val ints = mixed.collect { case i: Int => i * 10 }
    println(ints)
  }
}

変換を連鎖させる

各メソッドは新しいコレクションを返すため、読みやすいパイプラインとして連鎖させられます。各ステップが、直前のステップの出力を変換します。

object Main {
  def main(args: Array[String]): Unit = {
    val result = List(1, 2, 3, 4)
      .map(_ + 1)
      .filter(_ % 2 == 0)
    println(result)
  }
}

すっきりしたパイプライン

整った変換パイプラインの例を見てみましょう。偶数をフィルタリングし、2乗してから、大きな値だけを残します。パイプラインはデータの流れを説明するように読めます。

object Main {
  def main(args: Array[String]): Unit = {
    val result = (1 to 10).toList
      .filter(_ % 2 == 0)
      .map(x => x * x)
      .filter(_ > 10)
    println(result)
  }
}

クイックチェック

List("ab", "cd").flatMap(_.toList)は何を返しますか?

まとめ

基本的な変換について学びました。

  • map — 各要素を変換します(サイズは同じです)
  • filter / filterNot — 述語に基づいて要素を残す、または除外します
  • flatMap — マッピングしてから、ネストされた結果を平坦化します
  • collect — 部分関数を使ってフィルタリングとマッピングを行います
  • これらを連結して、読みやすく不変なパイプラインを構築できます

よくある質問

「変換」レッスンは無料ですか?

はい。「変換」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Scala for Backend Engineering & Functional Programmingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Scala for Backend Engineering & Functional Programmingコースには全4レッスンが含まれています。

「変換」で何を学びますか?

map、filter、flatMap です。 ブラウザで直接実行するハンズオンコードでScala for Backend Engineering & Functional Programmingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Scala for Backend Engineering & Functional Programmingを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのScala for Backend Engineering & Functional Programmingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「変換」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このScala for Backend Engineering & Functional Programmingレッスンでコードを書いて実行できますか?

はい。すべてのScala for Backend Engineering & Functional Programmingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. List、Vector、Set、Map
  2. 変換
  3. 畳み込みと削減
  4. グループ化とソート
← Scala for Backend Engineering & Functional Programmingに戻る