カテゴリ: Kotlin 更新日: 2025/09/01

Kotlinのdistinct・toSetで重複を削除する方法

Kotlinのdistinct・toSetで重複を削除する方法
Kotlinのdistinct・toSetで重複を削除する方法

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

生徒

「Kotlinでリストの中に同じ値が何回も入っている場合、それを1つずつにまとめる方法はありますか?」

先生

「ありますよ。KotlinにはdistincttoSetという便利な関数があって、重複を簡単に削除できます。」

生徒

「名前が似ていますが、どう違うんですか?」

先生

distinctは順番を保ちながら重複を削除し、toSetは集合型に変換することで重複を削除します。それぞれの特徴を詳しく見ていきましょう。」

1. distinctで重複を削除する方法

1. distinctで重複を削除する方法
1. distinctで重複を削除する方法

distinctは、リストやシーケンスから重複した要素を取り除き、最初に出てきた順番を保ったまま新しいリストを作ります。


fun main() {
    val numbers = listOf(1, 2, 2, 3, 3, 3, 4)
    val uniqueNumbers = numbers.distinct()
    println(uniqueNumbers)
}

[1, 2, 3, 4]

このように、同じ数字は最初の1つだけ残り、順番は元のままです。

2. toSetで重複を削除する方法

2. toSetで重複を削除する方法
2. toSetで重複を削除する方法

toSetはリストをSet型に変換します。Setは重複を許さないため、自動的に重複が削除されます。


fun main() {
    val numbers = listOf(1, 2, 2, 3, 3, 3, 4)
    val uniqueSet = numbers.toSet()
    println(uniqueSet)
}

[1, 2, 3, 4]

結果はdistinctと似ていますが、戻り値がSet型になる点に注意が必要です。Setは順番を保証しない場合もあるので、順序が重要なときはdistinctを使いましょう。

3. distinctとtoSetの使い分け

3. distinctとtoSetの使い分け
3. distinctとtoSetの使い分け
  • distinct:順序を保ちながら重複を削除したいとき
  • toSet:順序を気にせず、集合として扱いたいとき

例えば、ユーザーが登録したタグの一覧を表示する場合は順序が重要なのでdistinct、データベースに保存する場合は順序不要でtoSetを使うことが多いです。

4. distinctByで特定条件に基づく重複削除

4. distinctByで特定条件に基づく重複削除
4. distinctByで特定条件に基づく重複削除

KotlinにはdistinctByという派生メソッドもあり、特定の条件やキーに基づいて重複を削除できます。


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

fun main() {
    val users = listOf(
        User("田中", 20),
        User("田中", 25),
        User("佐藤", 20)
    )
    val uniqueByName = users.distinctBy { it.name }
    println(uniqueByName)
}

[User(name=田中, age=20), User(name=佐藤, age=20)]

この例では名前が同じユーザーを1件にまとめています。条件付きでの重複削除に便利です。

5. 実用例:メールアドレスの重複排除

5. 実用例:メールアドレスの重複排除
5. 実用例:メールアドレスの重複排除

メールマーケティングや通知機能などで、重複したアドレスへの送信を避けたい場合に使えます。


fun main() {
    val emails = listOf(
        "test@example.com",
        "user@example.com",
        "test@example.com"
    )
    val uniqueEmails = emails.distinct()
    println(uniqueEmails)
}

[test@example.com, user@example.com]

このように、無駄な重複を避けることで効率的な処理が可能になります。

カテゴリの一覧へ
新着記事
Go言語の構造体でインターフェースを実装する方法を初心者向けにやさしく解説!
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説
Go言語の文字列フォーマット!fmt.Sprintfで簡単に出力を整形する方法
Go言語のエラーと例外の違いを初心者向けに整理!わかりやすく解説
人気記事
No.1
Kotlin・Go・Swift記事の人気No1
Swiftのwhile文とrepeat while文を完全マスター!初心者にもわかる繰り返し処理の使い方と違い
No.2
Kotlin・Go・Swift記事の人気No2
Swift入門ガイド|基本構文と書き方をマスターしよう
No.3
Kotlin・Go・Swift記事の人気No3
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Kotlin・Go・Swift記事の人気No4
Kotlinの正規表現(Regex)の使い方をやさしく解説!文字列操作の基本を初心者向けに学ぼう
No.5
Kotlin・Go・Swift記事の人気No5
Kotlinで画面を作る!レイアウトXMLとビューの基本操作をやさしく解説
No.6
Kotlin・Go・Swift記事の人気No6
Kotlinのコンパニオンオブジェクトとは?初心者向けに使い方と役割をわかりやすく解説!
No.7
Kotlin・Go・Swift記事の人気No7
Kotlinのwhen式を完全ガイド!初心者でもわかるパターンマッチング的な使い方
No.8
Kotlin・Go・Swift記事の人気No8
Swiftのオプショナル型とは?初心者でもわかる使い方とアンラップの基礎