[Kotlin] コレクションのメソッドまとめ

今回はここまで紹介してきたコレクションで使えるメソッドを、備忘録的な意味も込めて残しておこうと思います。随時更新です。

要素の追加や削除、基本的なループ処理に関しては、ページ末尾に各コレクションの記事へのリンクを掲載してますので、そちらをご覧ください。

なおMapやMutableMapのメソッドは、新たに作成した別ページにまとめてあります。

[Kotlin]Map型プロパティとメソッド68種のまとめ
KotlinのMap型で定義されているプロパティ/メソッドは合わせて52。これに...

値を取得し、その値を返す

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, 関ジャニ錦戸亮]

コレクションの基本はこちら

[Kotlin] 配列の初期化と使い方
複数の値を収めるコンテナタイプの型はプログラムに欠かせません。今回はコンテナタイ...
[Kotlin]List / MutableListの特徴と使い方
Kotlinで複数の値を格納できる型の代表格といえば配列(Array)、コレクシ...
[Kotlin] Set型の特徴とList型との相互変換
今回はコレクション第2回、Set型についてのお話です。 SetはListと似てい...
タイトルとURLをコピーしました