ArrayList
と異なり、基本的に操作は新しいリストを返す形val numbers = List(1, 2, 3, 4)
println(numbers.head) // 1 (先頭要素)
println(numbers.tail) // List(2, 3, 4) (先頭以外)
println(numbers.isEmpty) // false
val list2 = 0 :: list1 // 先頭に0を追加した新しいリスト
val list3 = list1 :+ 5 // 末尾に5を追加した新しいリスト
.head
:先頭要素を取り出す.tail
:先頭を除いたリスト.isEmpty
:空かどうかを判定(true/false)::
:リストの先頭に要素を追加(新しいリストが返る):+
:リストの末尾に要素を追加(新しいリストが返る)参照:サンプルコード
map
:リストの各要素に関数を適用し、新しいリストを返す
val doubled = numbers.map(n => n * 2)
filter
:条件に合う要素だけを抽出し、新しいリストを返す
val evenNumbers = numbers.filter(n => n % 2 == 0)
参照:サンプルコード
map + flatten
val data = List("a b", "c d")
val result = data.flatMap(str => str.split(" "))
// List("a", "b", "c", "d")
map
で"a b"
→["a","b"]
に変換flatten
)累積的に要素を処理
val numbers = List(1, 2, 3, 4)
val sum = numbers.reduce((a, b) => a + b) // 10
reduce
:最初の2つの要素に関数を適用し、その結果と次の要素にまた適用…と繰り返すreduce
と似ているが、初期値がある
val numbers = List(1, 2, 3, 4)
val product = numbers.fold(1)((a, b) => a * b) // 24
1
)参照:サンプルコード
map
:各要素に関数を適用して新しいコレクションを作るflatMap
:各要素に関数を適用して、結果のコレクションをフラット化filter
:条件に合う要素だけ取り出すfoldLeft
/foldRight
:左/右から畳み込み計算を行うreduceLefrt
/reduvceRight
:畳み込み(初期値無し)foreach
:各要素に副作用関数を実行groupBy
:条件ごとにグループ化zip
:2つのコレクションを要素ごとに組みにするtake
/drop
:先頭から/先頭を除いた部分を取得