【3分Java入門】Listで重複するデータを取り除く方法

この記事ではListで重複するデータを取り除く方法をわかりやすく解説します!

List内の重複しているデータを削除したい
Listにデータを追加する際に重複しないようにしたい
Listから重複するデータを削除する方法はいくつもあるの?
Java8の新機能を使って簡潔に重複する要素を削除したい

今回はそんな悩みを解決する要素が重複しないListの作り方についてです。

なお、Javaの記事については、こちらにまとめています。

目次

HashSetを使って重複しないListを作る方法

ArrayList等で値が重複しないListを作ろうとすると自分で処理を書かなければならずとても面倒です。

しかし、HashSetを使うことでList内の重複しているデータを削除することが可能です!

HashSetの使い方を覚えるために次のプログラムを見てみましょう。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
 
public class Main {
    public static void main(String[] args) throws Exception {
 
        List<String> listA = new ArrayList<String>(Arrays.asList("s", "a", "m", "u", "r", "a", "i"));
        List<String> listB = new ArrayList<String>(new HashSet<>(listA));
         
        System.out.println("ListA = " + listA);
        System.out.println("ListB = " + listB);
 
    }
}

[実行結果]

ListA = [s, a, m, u, r, a, i]
ListB = [a, r, s, u, i, m]

このようにHashSetを使うことでListAの重複する文字列の”a”が一つ削除されたListBができました!

実行結果からわかるように、HashSetを使うと要素の並び順が変わります。

要素の並び順を変えたくない場合は、次のようにLinkedHashSetを使います。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;
 
public class Main {
    public static void main(String[] args) throws Exception {
 
        List<String> listA = new ArrayList<String>(Arrays.asList("s", "a", "m", "u", "r", "a", "i"));
        List<String> listB = new ArrayList<String>(new LinkedHashSet<>(listA));
         
        System.out.println("ListA = " + listA);
        System.out.println("ListB = " + listB);
 
    }
}

[実行結果]

ListA = [s, a, m, u, r, a, i]
ListB = [s, a, m, u, r, i]

このようにLinkedHashSetを使うことで要素の並び順を変えずに重複している要素を削除することができます。

Java8でStreamAPIを使う方法

最後にStreamAPIとdistinctメソッドを使った方法を解説します。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
 
public class Main {
    public static void main(String[] args) throws Exception {
 
        List<String> listA = new ArrayList<String>(Arrays.asList("s", "a", "m", "u", "r", "a", "i"));
        List<String> listB = listA.stream().distinct().collect(Collectors.toList());
         
        System.out.println("ListA = " + listA);
        System.out.println("ListB = " + listB);
 
    }
}

[実行結果]

ListA = [s, a, m, u, r, a, i]
ListB = [s, a, m, u, r, i]

この方法でも並び順を変えずに重複する要素を削除することができました!

ここではStreamAPIを使って、distinctメソッドで重複した要素を削除した後にcollect(Collectors.toList())でListに戻しています。

StreamAPIはJava8から追加されたデータの操作を簡単に行えるようにする機能です。
StreamAPIについては次の記事で詳しく解説しています!

まとめ

いかがでしたか?

今回はListから重複するデータを取り除く方法を解説しました。StreamAPIはListを便利に扱うことができるようになるのでぜひ覚えてください。

もし重複する要素のないListを作る方法を忘れてしまったらこの記事を確認してくださいね!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次