あるプログラマの日記

プログラマのメモ、出来事、考えたこと、勉強とかの雑記

List の使い方(続き4)

List の高階メソッド ( foreach, map, filter, find, partition )

foreach

すでに、何度も使用している foreach はリストの各要素に対して、
引数で指定された関数を適用させる。
foreach に指定する引数は、1つの引数をとり戻り値が Unit(戻り値無し) の関数

scala> val foo = (n: Int) => println(n + 100)
foo: (Int) => Unit = <function1>

scala> List(5, 6, 7).foreach(foo)
105
106
107

List(5, 6, 7).foreach(foo) は List(5, 6, 7).foreach(e =>foo(e)) の簡易な書き方

map

リストの各要素に対して、引数で指定された関数を適用させて、その結果を新しい
List として返す。引数で指定する関数は1つの引数をとり戻り値を返す関数

scala> List(5, 6, 7).map { e => e * 2 }
res0: List[Int] = List(10, 12, 14)

プレースホルダーを使うと

scala> List(5, 6, 7).map { _ * 2 }
res1: List[Int] = List(10, 12, 14)

filter

List[T] のT型の要素を引数にとる T => Boolean 型の関数を引数にとる。
関数の戻り値が true になるすべての要素の List を返す。
特定項目の抽出に使用。

scala> List(1, 2, 3, 4, 5, 6, 7).filter { _ % 2 == 0 }
res2: List[Int] = List(2, 4, 6)

find

filter と同じ形式の関数を引数にとる。 find の場合は関数の戻り値が
true になる最初の要素を持つ Option型の Some(x) を返す。
全ての要素が false の場合は None を返す。

scala> List(1, 2, 3, 4, 5, 6, 7).find { _ % 4 == 0 }
res3: Option[Int] = Some(4)

scala> List(1, 2, 3, 4, 5, 6, 7).find { _ > 8 }
res4: Option[Int] = None

partition

filter と同じ形式の関数を引数にとる。リストのペアを返す。
関数が true を返す要素のリストと関数が false を返す要素のリストのペアになる。

scala> List(1, 2, 3, 4, 5, 6, 7).partition { _ % 2 == 0 }
res5: (List[Int], List[Int]) = (List(2, 4, 6),List(1, 3, 5, 7))