今回はここまで紹介してきたコレクションで使えるメソッドを、備忘録的な意味も込めて残しておこうと思います。随時更新です。
要素の追加や削除、基本的なループ処理に関しては、ページ末尾に各コレクションの記事へのリンクを掲載してますので、そちらをご覧ください。
なおMapやMutableMapのメソッドは、新たに作成した別ページにまとめてあります。
値を取得し、その値を返す
first() / last()
インデックス番号ではなく、メソッドによって最初や最後の値を取得する。(List/Set)
val list = listOf("グー","チョキ","パー")
list.first() //グー
list.last() //パー
find{…} / findLast{…}
ラムダ式の結果trueになる最初の値を1つ取得する。(List/Set)
trueになる値が無ければ戻り値はnullになるため、戻り値の型はnull許容型。
findLastはラムダの結果がtrueになる最後の値を取得する。
list.find{it.length == 2} //グー
list.findLast{it.length == 2} //パー
getOrElse(…){…}
インデックス番号を引数に取り、値を取得する。(List/Map)
値が無ければラムダ式で設定された値を、デフォルト値として返す。
val list = listOf(1,2,3)
list.getOrElse(0){"No Value"} //1
list.getOrElse(3){"No Value"} //No Value
getOrNull(…)
インデックス番号を引数に取り、値を取得する。値が無ければnullを返す。(List)
list.getOrNull(2) //3
list.getOrNull(5) //null
elementAtOrElse(…){…} / elementAtOrNull(…)
getOrElseやgetOrNullと働きは同じ。Set型にも使用可能。(List/Set)
インデックス番号を取得する
indexOf(…)
引数に指定した値のインデックス番号を取得する。値が存在しなかった場合、-1を返す。(List/Set)
val set = setOf(1,2,3)
println(set.indexOf(3)) //2
println(set.indexOf(6)) //-1
算出する
max() / min()
要素の中で最も大きい/小さい値を算出する。戻り値はnull許容型。(List/Set)
val list = listOf(33,48,52)
println(list.max()) //52
println(list.min()) //33
maxBy{…} / minBy{…}
大きい/小さいの基準をラムダ式で指定する。(List/Set/Map)
val map = mapOf(1 to "a",2 to "b",3 to "c")
println(map.maxBy{it.key}) //3=c
sum()
要素の合計を算出する。(List/Set)
list.sum() //133
average()
要素の平均値を算出する。戻り値はDouble型。(List/Set)
list.average() //44.333333333333336
ちなみにmax()やmin()は文字列でも使用可能。アルファベット順やあいうえお順で算出される。
sum()やaverage()は不可。
val list = listOf("おはよう","こんばんは","こんにちは")
list.min() //おはよう
list.max() //こんばんは
値をフィルタリングし、新たなListを返す
filter{…} / filterNot{…}
各要素をラムダ式に通し、その結果がtrueになる値だけを格納したListを返す。(List/Set/Map)
filterNotの場合は、ラムダの結果がfalseになる値だけを格納する。
val list = listOf(81,43,7,51,98,14,39,65,2)
println(list.filter{it<50}) //[43, 7, 14, 39, 2]
filterNotNull()
要素にnullがあれば取り除いて、nullの無い新たなListを返す。戻り値はnull非許容型。(List/Set)
val list = listOf(1,null,2,null,3,null)
println(list.filterNotNull()) //[1, 2, 3]
take(…) / takeLast(…)
元となるListやSetから}引数の数だけ値を取得し、その値を格納した新たなListを返す。(List/Set)
takeは最初から数え、takeLastは最後から数える。
println(list.take(2)) //[81, 43]
println(list.takeLast(2)) //[65, 2]
distinct()
Listから重複する項目を削除し、新たなListを返す。(List/Set)
val list = listOf(1,2,3,1,2,3)
println(list.distinct()) //[1, 2, 3]
値を更新し、新たなListを返す
map{…}
元となるコレクションの各要素をラムダ式に通し、ラムダの結果をListにして返す。(List/Set/Map)
val map = mapOf("one" to 50,"two" to 100,"three" to 150)
val ans = map.map{it.value*3}
println(ans) //[150, 300, 450]
並べ替える
sort() / sortDescending()
要素を並べ替える。戻り値無しで呼び出し元を書き換える。(MutableList)
sortは昇順、sortDescendingは降順。
val list = mutableListOf(51,23,-90,-25,60,0,72)
list.sort()
println(list) //[-90, -25, 0, 23, 51, 60, 72]
文字列が入ったMutableListにも使用可能。アルファベット順で並べ替える。
val list2 = mutableListOf("golf","football","baseball")
list.sort()
println(list2) //[baseball, football, golf]
sorted() / sortedDescending()
sort()とは違い、戻り値はsortされたList。読み込み専用のコレクションに対しても使用可能。(List/Set)
val a = list.sortedDescending()
println(a) //[72, 60, 51, 23, 0, -25, -90]
println(list) //[51, 23, -90, -25, 60, 0, 72]
toSortedMap
Mapをキーの順番で並べ替え、新たなMapを返す。(Map)
val map = mapOf(5 to "a",1 to "b",3 to "c")
println(map.toSortedMap()) //{1=b, 3=c, 5=a}
sortBy{…} / sortedBy{…}
ソートする基準をラムダ式で指定する。
sortByは戻り値無し(MutableListのみ)。sortedByはsortされたListを返す。(List/Set)
逆順のsortDescendingBy、sortedDescendingByもある。
val list = mutableListOf("ヤババババ","わかりみが深い","エモい")
list.sortBy{it.length}
println(list) //[エモい, ヤババババ, わかりみが深い]
reverse() / reversed()
要素を逆順にする。これも戻り値無しのreverse(MutableListのみ)と、新たなListを返すreversed(List/Set)がある。
val list = mutableListOf(39,52,14,7,84)
list.reverse()
println(list) //[84, 7, 14, 52, 39]
条件に一致するか判定し、Boolean型を返す
all{…}
各要素をラムダ式に通し、全ての要素がラムダ式でtrueと判定されればtrueを返す。(List/Set/Map)
val set = setOf("HONDA","TOYOTA","NISSAN")
val a = set.all{it.contains("A")}
val s = set.all{it.contains("S")}
println(a) //true
println(s) //false
any{…}
呼び出し元の各要素をラムダ式に通し、1つでもtrueと判定されればtrueを返す。(List/Set/Map)
val s = set.any{it.contains("S")}
println(a) //true
contains(…) / containsAll(…)
引数に指定した要素が、呼び出し元に含まれているかどうかを判定する。(List/Set/Map)
containsAllにListを渡すことで、複数の項目を指定できる。
上記のように文字列などでも使用可能。
val t = set.contains("TOYOTA")
val a = set.containsAll(listOf("HONDA","NISSAN","Porsche"))
println(t) //true
println(a) //false
Map型の場合はcontainsKeyやcontainsValueによって、キーやバリューを指定できる。
2つを1つに
zip(){…}
2つのコレクションを1つに合わせる。(List/Set)
val list = listOf("V6","嵐","関ジャニ")
val set = setOf("岡田准一","MJ","錦戸亮")
val j = list.zip(set)
println(j) //[(V6, 岡田准一), (嵐, MJ), (関ジャニ, 錦戸亮)]
戻り値はPair型が格納されたListとなる。この場合はList<Pair<String,String>>。
zipした結果はMapに変換できる。
println(j.toMap()) //{V6=岡田准一, 嵐=MJ, 関ジャニ=錦戸亮}
さらに波括弧{}を加えると、ラムダ式の結果を格納することも可能。この場合、戻り値はListになる。
val j = list.zip(set){l,s->l+s}
println(j) //[V6岡田准一, 嵐MJ, 関ジャニ錦戸亮]