Javaのリストからすべての重複を削除する

Javaのリストからすべての重複を削除する

このクイックチュートリアルでは、how to clean up the duplicate elements from a Listを紹介します。最初はプレーンJavaを使用し、次にGuavaを使用し、最後にJava 8Lambdaベースのソリューションを使用します。

この記事は、例としてここのthe “Java – Back to Basic” seriesの一部です。

1. プレーンJavaを使用してリストから重複を削除する

標準のJavaコレクションフレームワークを使用してリストから重複要素を削除するのは簡単ですthrough a Set

public void
  givenListContainsDuplicates_whenRemovingDuplicatesWithPlainJava_thenCorrect() {
    List listWithDuplicates = Lists.newArrayList(0, 1, 2, 3, 0, 0);
    List listWithoutDuplicates = new ArrayList<>(
      new HashSet<>(listWithDuplicates));

    assertThat(listWithoutDuplicates, hasSize(4));
}

ご覧のとおり、元のリストは変更されていません。

参考文献:

Javaコレクションインタビューの質問

一連の実用的なコレクション関連のJavaインタビューの質問

Java –複数のコレクションを組み合わせる

Javaで複数のコレクションを結合するための迅速かつ実用的なガイド

Javaを使用してリスト内の要素を見つける方法

Javaのリストで要素を見つける簡単な方法を見てください。

2. Guavaを使用してリストから重複を削除する

同じことがグアバを使用して行うこともできます:

public void
  givenListContainsDuplicates_whenRemovingDuplicatesWithGuava_thenCorrect() {
    List listWithDuplicates = Lists.newArrayList(0, 1, 2, 3, 0, 0);
    List listWithoutDuplicates
      = Lists.newArrayList(Sets.newHashSet(listWithDuplicates));

    assertThat(listWithoutDuplicates, hasSize(4));
}

また、元のリストは変更されません。

3. Java 8Lambdaを使用してリストから重複を削除する

最後に、Java8でLambdasを使用した新しいソリューションを見てみましょう。 equals()メソッドによって返された結果に基づいて、個別の要素で構成されるストリームを返すuse the distinct() method from the Stream APIに移動します。

public void
  givenListContainsDuplicates_whenRemovingDuplicatesWithJava8_thenCorrect() {
    List listWithDuplicates = Lists.newArrayList(1, 1, 2, 2, 3, 3);
    List listWithoutDuplicates = listWithDuplicates.stream()
     .distinct()
     .collect(Collectors.toList());
}

これで、リストから重複したアイテムをすべてクリーンアップする3つの簡単な方法ができました。

4. 結論

この記事では、プレーンJava、Google Guava、およびJava 8を使用して、リストから重複を簡単に削除できることを示します。

これらすべての例とスニペットの実装は、GitHub projectにあります。 これはMavenベースのプロジェクトであるため、インポートと実行が簡単である必要があります。