Java - リスト重複排除、2つの方法

JavaでArrayListの要素の中に重複する要素があるかどうかを確認して削除する方法を紹介します。

1. Setでリスト重複を削除

HashSetなど、Setは重複要素を許可しないデータ構造です。 重複要素を含むリストをSetに変換すると、重複が削除されます。 重複要素が削除されたSetをリストに戻すと、重複が削除されたListになります。

以下のコードは、リストをSetに変換し、再びSetをリストに変換して重複を削除する例です。

String[] arr = {"a", "b", "c", "d", "a", "e"};
List<String> list = new ArrayList<>(List.of(arr));

Set<String> set = new HashSet<>(list);

List<String> result = new ArrayList<>(set);
System.out.println("result : " + result);

Output:

result : [a, b, c, d, e]

1.1 リストに重複要素があることを確認する

重複要素があるリストのサイズと重複が削除されたリストのサイズを比較して、サイズが異なる場合に重複があると判断できます。

次の例では、Setを使用して重複を削除したリストとサイズを比較します。

String[] arr = {"a", "b", "c", "d", "a", "e"};
List<String> list = new ArrayList<>(List.of(arr));

Set<String> set = new HashSet<>(list);
if (set.size() != list.size()) {
    System.out.println("List contains duplicates");
}

Output:

List contains duplicates

2. Stream.distinct() でリストを重複排除

Stream.distinct() は、Stream の重複要素をすべて削除します。 collect(Collectors.toList()) は重複排除されたストリームの要素をリストに変換して返します。

String[] arr = {"a", "b", "c", "d", "a", "e"};
List<String> list = new ArrayList<>(List.of(arr));

List<String> result = list.stream().distinct().collect(Collectors.toList());
System.out.println("result : " + result);

Output:

result : [a, b, c, d, e]

2.1 リストに重複要素があることを確認する

元のリストのサイズと重複が削除されたリストのサイズを比較して、サイズが異なる場合は重複した要素が存在すると判断できます。

String[] arr = {"a", "b", "c", "d", "a", "e"};
List<String> list = new ArrayList<>(List.of(arr));

if (list.size() != list.stream().distinct().count()) {
    System.out.println("List contains duplicates");
}

Output:

List contains duplicates
codechachaCopyright ©2019 codechacha