sortedByとsortedWithでリストを柔軟にソート

Kotlin
記事内に広告が含まれる場合があります

Kotlinでは、リストの並び替えを直感的に行える sortedBysortedWith という便利な関数が用意されています。これらを使うことで、昇順・降順のソートやカスタム比較を簡単に実装できます。

sortedByの基本的な使い方

sortedBy はリストの各要素から取得した値を基準にして 昇順(小さい順) にソートします。

Kotlin
val numbers = listOf(5, 2, 8, 1, 4)

val sortedNumbers = numbers.sortedBy { it }

println(sortedNumbers) // 出力: [1, 2, 4, 5, 8]

sortedBy の引数に ソートの基準となる値 を指定することで、オブジェクトリストのソートも簡単に行えます。

Kotlin
data class User(val name: String, val age: Int)

val users = listOf(
    User("田中", 30),
    User("佐藤", 25),
    User("鈴木", 35)
)

val sortedUsers = users.sortedBy { it.age }

println(sortedUsers) 
// 出力: [User(name=佐藤, age=25), User(name=田中, age=30), User(name=鈴木, age=35)]

sortedByDescending を使って降順ソート

降順(大きい順)に並び替えたい場合は sortedByDescending を使用します。

Kotlin
val sortedDescending = numbers.sortedByDescending { it }

println(sortedDescending) // 出力: [8, 5, 4, 2, 1]

オブジェクトリストも同様に、プロパティを基準に降順ソートできます。

Kotlin
val sortedUsersDesc = users.sortedByDescending { it.age }

println(sortedUsersDesc) 
// 出力: [User(name=鈴木, age=35), User(name=田中, age=30), User(name=佐藤, age=25)]

sortedWith を使ったカスタムソート

より細かいソートのルールを設定したい場合は、 sortedWith を使用します。

1. Comparator を指定してソート

Kotlin
val sortedByLength = listOf("Kotlin", "Java", "Python", "C")
    .sortedWith(compareBy { it.length })

println(sortedByLength) // 出力: [C, Java, Kotlin, Python]

このように、文字列の長さを基準にソートすることもできます。

2. 複数条件でソート(年齢→名前の順)

Kotlin
val sortedMulti = users.sortedWith(compareBy<User> { it.age }.thenBy { it.name })

println(sortedMulti)
// 出力: [User(name=佐藤, age=25), User(name=田中, age=30), User(name=鈴木, age=35)]

thenBy を使うことで、同じ年齢の場合は名前でソートするなどのルールを追加できます。


sortedBy vs sortedWith の違い

関数使い方用途
sortedBy単純な昇順ソート一つのプロパティでソート
sortedByDescending単純な降順ソート一つのプロパティで逆順ソート
sortedWithカスタムComparatorでソート複数条件のソートや特別なルールを適用

まとめ

  • sortedBy単純な昇順ソート に最適
  • sortedByDescending を使えば 降順ソート も簡単
  • sortedWith を使うと カスタムルールのソート が可能
  • thenBy を組み合わせれば 複数条件でのソート もできる

データの並び替えを柔軟に行いたい場合は、これらの関数を適切に活用して、より可読性の高いコードを書いてみましょう!

タイトルとURLをコピーしました