【Java】Listの重複を削除したいよ!これで解決!

JavaでListの重複を削除する方法はいくつかあります!

それぞれ用途やパフォーマンスに応じて使い分けで来ますので代表的な実装方法を複数紹介していきます

1. Setを使う方法(順序無視)

List<String> list = Arrays.asList("A", "B", "A", "C", "B");
Set<String> set = new HashSet<>(list);
List<String> distinctList = new ArrayList<>(set);

重複削除されるが、順序は保証されませんので注意です。

2. LinkedHashSetを使う方法(順序保持)

List<String> list = Arrays.asList("A", "B", "A", "C", "B");
Set<String> set = new LinkedHashSet<>(list);
List<String> distinctList = new ArrayList<>(set);

重複を削除しつつ、元の順序を保持してくれます

3. Java 8 Streamを使う方法(順序保持)

List<String> list = Arrays.asList("A", "B", "A", "C", "B");
List<String> distinctList = list.stream() //
                                .distinct() //
                                .collect(Collectors.toList());

Java 8以上であればこれが良いでしょう

4. forループとcontainsを使う方法

List<String> list = Arrays.asList("A", "B", "A", "C", "B");
List<String> distinctList = new ArrayList<>();
for (String item : list) {
    if (!distinctList.contains(item)) {
        distinctList.add(item);
    }
}

一番古典的な実装ですね

仕組みがわかりやすいです

5. Collectors.toCollectionで特定のSetを明示

List<String> list = Arrays.asList("A", "B", "A", "C", "B");
List<String> distinctList = list.stream() //
                                .collect(Collectors.toCollection(LinkedHashSet::new)) //
                                .stream() //
                                .collect(Collectors.toList());

Setの種類も指定可能なので、これもありですね


是非ご参考ください

是非フォローしてください

最新の情報をお伝えします