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));
}
ご覧のとおり、元のリストは変更されていません。
参考文献:
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ベースのプロジェクトであるため、インポートと実行が簡単である必要があります。