カテゴリ: Kotlin 更新日: 2025/12/12

Kotlinのsorted・sortedByでコレクションをソートする方法【初心者向け完全ガイド】

Kotlinのsorted・sortedByでコレクションをソートする方法
Kotlinのsorted・sortedByでコレクションをソートする方法

先生と生徒の会話形式で理解しよう

生徒

「Kotlinでリストの要素を順番に並べ替えるにはどうしたらいいですか?」

先生

「KotlinにはsortedsortedByという便利な関数があります。数字や文字列を昇順や特定の条件で並び替えることができますよ。」

生徒

「sortedとsortedByって、どう違うんですか?」

先生

「sortedは自然な順序で並べ替え、sortedByは指定した条件(キー)に基づいて並べ替えます。では、例を交えて説明しますね。」

1. sortedとは?

1. sortedとは?
1. sortedとは?

sortedは、リストの要素を自然な順序で並べ替えるための関数です。自然な順序とは、数字であれば小さい順、文字列であれば辞書順(あいうえお・ABC順)を指します。

ポイントは、元のリストは変更されず、新しい並び替え済みのリストが返ってくる点です。安全にデータを扱えるため、初心者でも安心して使えます。

まずは、数字のリストを小さい順に並べ替える基本的な例を見てみましょう。


fun main() {
    val numbers = listOf(5, 2, 8, 1, 3)
    val sortedNumbers = numbers.sorted()
    println(sortedNumbers)
}

[1, 2, 3, 5, 8]

この例では、sorted()を呼び出すだけで、数字が自動的に小さい順へ並び替えられています。for文などで比較処理を書く必要はありません。

なお、文字列のリストに使った場合も同様で、アルファベットやひらがなの順番に従って並び替えられます。sortedは「シンプルに順番を整えたいとき」に最初に覚えておきたい関数です。

2. sortedByとは?

2. sortedByとは?
2. sortedByとは?

sortedByは、リストの要素そのものではなく、要素の中にある値(プロパティ)や計算結果を基準に並べ替えたいときに使う関数です。

sortedが「そのままの値」で順番を決めるのに対し、sortedByは「どの値を基準にするか」を自分で指定できるのが大きな特徴です。

たとえば、文字列を長さの短い順に並べたい場合は、次のように書きます。


fun main() {
    val words = listOf("apple", "banana", "kiwi", "grape")
    val sortedByLength = words.sortedBy { it.length }
    println(sortedByLength)
}

[kiwi, apple, grape, banana]

{ it.length }の部分が「並び替えの基準」です。ここでは「文字数」を表しており、短い単語から順番に並んでいます。

このようにsortedByを使えば、「長さ」「価格」「年齢」など、さまざまな条件を基準に並べ替えができるため、実務でもよく使われる便利な関数です。

3. 降順で並べ替える(sortedDescending / sortedByDescending)

3. 降順で並べ替える(sortedDescending / sortedByDescending)
3. 降順で並べ替える(sortedDescending / sortedByDescending)

並べ替えは「小さい順」だけでなく、大きい順(降順)にしたい場面もよくあります。たとえば、点数の高い順にランキングを作ったり、長い単語を先に表示したりするケースです。

そんなときは、数字ならsortedDescending、条件を指定したいならsortedByDescendingを使います。どちらも元のリストはそのままで、並び替えた新しいリストが返ってくるので安心です。


fun main() {
    val numbers = listOf(5, 2, 8, 1, 3)
    val descNumbers = numbers.sortedDescending()
    println(descNumbers)

    val words = listOf("apple", "banana", "kiwi", "grape")
    val descByLength = words.sortedByDescending { it.length }
    println(descByLength)
}

[8, 5, 3, 2, 1]
[banana, apple, grape, kiwi]

最初のsortedDescending()は、数字を「大きい → 小さい」の順に並べ替えています。次のsortedByDescending { it.length }は、it.length(文字数)を基準にして、長い単語から順番に並べています。

初心者向け:覚え方のコツ

Descendingは「下り=大きい方から下がっていく」と覚えると分かりやすいです。まずは「降順にしたいなら末尾にDescending」と覚えておくと迷いません。

4. データクラスとsortedBy

4. データクラスとsortedBy
4. データクラスとsortedBy

データクラスの特定のフィールドで並べ替えることも簡単です。例えば、生徒を年齢順に並べ替える場合です。


data class Student(val name: String, val age: Int)

fun main() {
    val students = listOf(
        Student("山田", 20),
        Student("佐藤", 18),
        Student("鈴木", 22)
    )
    val sortedByAge = students.sortedBy { it.age }
    println(sortedByAge)
}

[Student(name=佐藤, age=18), Student(name=山田, age=20), Student(name=鈴木, age=22)]

このように、オブジェクトのプロパティを使って並べ替えができます。

5. 実用例:商品の価格順に並べ替え

5. 実用例:商品の価格順に並べ替え
5. 実用例:商品の価格順に並べ替え

ネットショップの商品リストを価格の安い順に並べる例です。


data class Product(val name: String, val price: Int)

fun main() {
    val products = listOf(
        Product("ノートパソコン", 120000),
        Product("マウス", 2000),
        Product("キーボード", 5000)
    )
    val sortedByPrice = products.sortedBy { it.price }
    println(sortedByPrice)
}

[Product(name=マウス, price=2000), Product(name=キーボード, price=5000), Product(name=ノートパソコン, price=120000)]

安い順・高い順で並べ替えることで、ユーザーが商品を探しやすくなります。

6. sortedとsortedByの使い分け

6. sortedとsortedByの使い分け
6. sortedとsortedByの使い分け
  • sorted():要素自体が比較可能(数値や文字列)で、その自然順序で並べ替える
  • sortedBy { ... }:特定の条件やプロパティに基づいて並べ替える
  • 降順の場合はsortedDescending()sortedByDescending()を使う

このように、用途によって関数を選べば効率的にデータを並べ替えられます。

まとめ

まとめ
まとめ

Kotlinでリストやコレクションの要素を並べ替えるときに使うsortedやsortedByという関数は、初めて学ぶ段階では違いが分かりにくいものですが、実際にはとても直感的で扱いやすい機能です。自然な順番で並べ替えるsorted、条件を指定して並び替えるsortedBy、さらに降順にしたいときのsortedDescendingやsortedByDescendingなど、場面に応じて柔軟に使い分けることができます。並べ替えを正しく使えるようになると、日常的なデータ処理からアプリケーションでの一覧表示、検索機能の最適化など、幅広い場面で役立ちます。

並べ替えという操作は単に順番を変えるだけの作業に思えますが、実際はデータを扱う上で非常に重要な工程であり、情報をどのように見せるか、どのように扱うかという点に大きく関わります。例えば、商品一覧の価格順表示、生徒名簿の年齢順ソート、コメントを投稿日時で並び替えるといった処理は、すべてsortedやsortedByで実現できます。こうした日常的な例を考えると、実務でも活用できる技術であることがよく分かります。

また、sortedやsortedByはイミュータブルなコレクションに対して使用しても新しいリストを生成するため、元のデータが変更されることはありません。この性質により、データを安全に扱いながら複数の構成を比較することができ、学習段階でも安心して使える仕組みになっています。さらにデータクラスを利用してプロパティをキーに並べ替える方法は、実用的な場面にも直結するため、覚えておくととても便利です。

実務でも学習でも、複雑なデータを処理する場合は「どの基準で並べるか」が常に問われます。sortedByを使えば、文字列の長さを基準にしたり、計算した結果を基準にしたり、オブジェクトの特定の要素を参照したりと、柔軟に並べ替え条件を設計できます。これはデータの見せ方を工夫したいときや、ユーザーが使いやすい並び順を設定したいときにとても役立ちます。

以下のサンプルコードは、複雑な条件を組み合わせてsortedByを活用する例です。商品の価格を基準にしつつ、同じ価格帯なら名前の長さで並べ替えるといった処理も簡単に書けることがわかります。

複数条件で並べ替えるサンプルコード


data class Item(val name: String, val price: Int)

fun main() {
    val items = listOf(
        Item("りんご", 300),
        Item("みかん", 300),
        Item("ぶどう", 500),
        Item("キウイ", 300)
    )
    val sortedItems = items.sortedBy { it.price }
        .sortedBy { it.name.length }

    println(sortedItems)
}

このように複数のsortedByを組み合わせることで、より細かい並べ替えが実現でき、データの分析や表示において非常に役立ちます。アプリ開発や業務システムの画面表示にも役立つため、Kotlin初心者であってもぜひ身につけておきたい重要な部分です。

並べ替えの仕組みを理解しておくと、ほかの処理にも応用が利きます。例えば、検索結果のフィルタリング後に並び替えを行って見やすくしたり、ランキング形式の一覧を作ったりすることも簡単になります。並べ替えは地味な操作に見えますが、データを扱うすべてのアプリケーションにおいて重要な要素であるため、正しい知識を身につけておくことが大切です。

今回学んだsorted、sortedBy、sortedDescending、sortedByDescendingの違いと使い分けをしっかり理解しておけば、さまざまなコレクション操作がより自然に書けるようになります。実際の開発でも、データの順序を整える技術は頻繁に必要となるため、今後の学習や実践に大いに役立つでしょう。

先生と生徒の振り返り会話

生徒

「先生、sortedとsortedByを比べてみると、用途に応じて使い分けることが大事なんだとよく分かりました。特にデータクラスの並べ替えは実用的だと思いました。」

先生

「その通りですよ。実際のアプリでは、名前順や価格順、日付順など、さまざまな並べ替えが必要になります。sortedByはそうした実用的な場面でとても役立つので、ぜひ覚えておいてください。」

生徒

「降順で並べ替える関数も分かりやすかったです。sortedDescendingやsortedByDescendingは、ランキングを作りたいときにも使えそうですね。」

先生

「ええ、その通りです。並べ替えの仕組みを理解しておけば、データの見せ方を自由に工夫できるようになります。今回の内容を実際にプログラムで試してみると、さらに理解が深まりますよ。」

生徒

「ありがとうございます。今日の内容をしっかり復習して、もっと複雑なデータの処理にも挑戦してみます!」

先生

「それが一番大切です。基本を押さえれば応用はどんどん広がるので、焦らず丁寧に進めていきましょう。」

関連記事:
カテゴリの一覧へ
新着記事
New1
Kotlin
Kotlinのforループの基本!範囲・配列・コレクションの繰り返し処理
New2
Go言語
Go言語のスライスでappend時のメモリの仕組みを理解しよう!初心者でもわかる基礎解説
New3
Go言語
Go言語のスコープとは?ローカル変数・グローバル変数の違いと使い分け
New4
Go言語
Go言語のhttp.ResponseWriterとhttp.Requestの仕組みを理解しよう
人気記事
No.1
Java&Spring記事人気No1
Go言語
Go言語の関数パラメータ!値渡しと参照渡しの違いを理解しよう
No.2
Java&Spring記事人気No2
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.3
Java&Spring記事人気No3
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.4
Java&Spring記事人気No4
Swift
Swiftで数値と文字列を相互変換!NumberFormatterで桁区切りや通貨表示をわかりやすく解説
No.5
Java&Spring記事人気No5
Kotlin
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説
No.6
Java&Spring記事人気No6
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.7
Java&Spring記事人気No7
Kotlin
Kotlinで画面遷移を実装しよう!初心者でもわかるIntentの使い方完全ガイド
No.8
Java&Spring記事人気No8
Swift
SwiftPMでのバージョン指定と互換性の考え方を初心者向けに徹底解説