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))