変換
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フィードバックを取得できます。ローカル設定は不要です。