カテゴリ: Kotlin 更新日: 2026/03/07

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

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

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

生徒

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

先生

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

生徒

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

先生

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

1. distinctで重複を削除する方法:順番を維持してスッキリ

1. distinctで重複を削除する方法:順番を維持してスッキリ
1. distinctで重複を削除する方法:順番を維持してスッキリ

Kotlinのdistinct(ディスティンクト)は、リストの中から「すでに登場した値」を自動で見つけ出し、最初に出てきた順番を崩さずに重複だけを取り除いてくれる非常に賢い関数です。

プログラミングを始めたばかりの方でもイメージしやすいように、買い物リストを例に考えてみましょう。「りんご」を2回書いてしまっても、distinctを使えば、最初に書いた位置に「りんご」を残したまま、後から書いた余計な項目だけを消してくれます。


fun main() {
    // 同じ果物が混ざっているリスト(重複あり)
    val shoppingList = listOf("りんご", "バナナ", "りんご", "みかん", "バナナ")
    
    // distinctを使って重複をカット
    val uniqueList = shoppingList.distinct()
    
    println("元のリスト: $shoppingList")
    println("整理後のリスト: $uniqueList")
}

元のリスト: [りんご, バナナ, りんご, みかん, バナナ]
整理後のリスト: [りんご, バナナ, みかん]

このコードのポイントは、2回目に出てきた「りんご」や「バナナ」が消えても、「りんご」が一番最初にあるという順番は変わっていない点です。リストの並び順に意味があるデータを扱うときは、このdistinctを使うのが最も安全で確実な方法といえます。

内部的な仕組みとしては、元のリストを先頭から一つずつ確認し、新しいリストにまだ入っていないものだけを追加していく処理を行っています。難しい計算を書かなくても、たった一行でデータをクリーンにできるのがKotlinの魅力ですね。

2. toSetメソッドを使って手軽に重複データを消す方法

2. toSetメソッドを使って手軽に重複データを消す方法
2. toSetメソッドを使って手軽に重複データを消す方法

Kotlinでリスト(データの並び)から重複した値を一気に取り除きたいとき、最もシンプルで便利な方法の一つがtoSet()という命令を使うことです。

「Set(セット)」とは、数学でいう「集合」のようなもので、「同じ値を2つ以上持つことができない」という特別なルールを持っています。そのため、リストを一度Setに変換するだけで、魔法のように重複が消えてスッキリとしたデータになります。


fun main() {
    // 同じ数字が混ざっているリストを用意します
    val numbers = listOf(1, 2, 2, 3, 3, 3, 4)
    
    // toSetを使って重複をカット!
    val uniqueSet = numbers.toSet()
    
    // 結果を表示してみましょう
    println(uniqueSet)
}

[1, 2, 3, 4]

この方法のポイントは、初心者の方でも直感的に書けるほど短いコードで済む点です。ただし、注意点が1つあります。toSet()を使った後のデータは「List」ではなく「Set」という別の型に変わります。

Set型は、重複を許さない代わりに「何番目のデータを取り出す」といった操作がListほど得意ではありません。また、基本的には元の順番を保持してくれますが、プログラムの意図として「順番が何より大切」という場合は、前述した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件にまとめています。条件付きでの重複削除に便利です。

Kotlinを基礎からしっかり学びたい人や、 Java経験を活かしてモダンな言語にステップアップしたい人には、 定番の入門書がこちらです。

基礎からわかるKotlinをAmazonで見る

※ Amazon広告リンク

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]

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

関連セミナーのご案内

【未経験OK】Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験する60分

「プログラミングを始めたい」を形にする。最新言語Kotlinで楽しむ、ものづくりの第一歩。

本講座は、プログラミング経験が全くない方のためのエントリー講座です。「コードを書くってどういうこと?」という基本から、世界中で使われている最新言語Kotlin(コトリン)を使って、実際にプログラムを動かすまでを体験します。難しい理屈よりも、まずは「自分の手で動かす楽しさ」を最短距離で実感していただきます。

具体的な体験内容と環境

【つくるもの】
簡単な言葉を入力すると自動で返答してくれる「対話型ミニプログラム」や、計算を自動化する「便利ツール」をゼロから作成します。黒い画面に自分の書いた文字が表示される瞬間は、最高の感動体験です。

【開発環境】
プロのエンジニアが実際に使っている開発ツールIntelliJ IDEA(インテリジェイ)をインストールします。ボタン一つで日本語化し、初心者でも迷わず操作できる「魔法の設定」を一緒に行います。

この60分で得られる3つの体験

1. 自分のパソコンが「開発基地」に

プロと同じ道具を揃えることで、明日から一人でもプログラミングを続けられる環境が整います。

2. プログラミングの「仕組み」がスッキリ

「変数」や「型」といった難しい言葉も、身近な例え話で解説。モヤモヤをゼロにします。

3. 「読みやすい」から「直せる」へ

Kotlinは英語に近くて読みやすいのが特徴。自分でコードを読んで、間違いを見つけるコツも伝授します。

※本講座は、パソコン操作が不安な方でも安心して受講いただける完全マンツーマンです。あなたのペースに合わせて、一つずつ丁寧に進めていきます。

セミナー画像

Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験

カテゴリの一覧へ
新着記事
New1
Go言語
Go言語のwhile的なforループの使い方!条件式ループの基本を解説
New2
Go言語
Go言語プログラムの実行方法まとめ!VSCode・ターミナルでの実行手順を解説
New3
Swift
Swift意味とは?プログラミング言語・金融・鳥の違いを徹底解説
New4
Swift
Swift 戻り値の扱い方と複数戻り値の返し方|初心者でも分かる関数の基本
人気記事
No.1
Java&Spring記事人気No1
Go言語
Go言語でリダイレクト処理を行う方法(http.Redirect)を初心者向けに解説
No.2
Java&Spring記事人気No2
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.3
Java&Spring記事人気No3
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Java&Spring記事人気No4
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.5
Java&Spring記事人気No5
Go言語
Go言語のgo.modファイル完全ガイド!初心者でもわかる仕組みと書き方
No.6
Java&Spring記事人気No6
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.7
Java&Spring記事人気No7
Go言語
Go言語で条件式を1行で書くコツ!三項演算子の代替と短縮記法
No.8
Java&Spring記事人気No8
Kotlin
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説