Java 删除List中的重复元素

作者 | 2020年4月26日

本教程将向你演示如何删除List中的重复元素,删除List中重复元素的方法包括:纯Java实现、使用Java8 Lambda表达式、使用Guava。

1. 纯Java实现删除List中的重复元素

我们可以很容易的通过Java集合类——Set来实现该功能。

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

    // 使用HashSet进行去重
    List<Integer> listWithoutDuplicates = new ArrayList<>(new HashSet<>(listWithDuplicates));
    assertThat(listWithoutDuplicates, hasSize(4));
}

如你所见,该方法不会改变已有的List。

2. 使用Guava删除List中的重复元素

同样的功能也可以使用Guava来完成。

public void
  givenListContainsDuplicates_whenRemovingDuplicatesWithGuava_thenCorrect() {
    List<Integer> listWithDuplicates = Lists.newArrayList(0, 1, 2, 3, 0, 0);
    // 使用Guava,原理同上
    List<Integer> listWithoutDuplicates = Lists.newArrayList(Sets.newHashSet(listWithDuplicates));

    assertThat(listWithoutDuplicates, hasSize(4));
}

同样,该方法也不会改变已有的List。

3. 使用Java 8的Stream + Lambda表达式删除重复元素

最后我们来看一下最新的解决方法,使用Java8的Stream + Lambda表达式来进行去重,Stream的distinct()方法可以基于元素的equlas方法实现去重:

public void
  givenListContainsDuplicates_whenRemovingDuplicatesWithJava8_thenCorrect() {
    List<Integer> listWithDuplicates = Lists.newArrayList(1, 1, 2, 2, 3, 3);
    // 使用Stream去重
    List<Integer> listWithoutDuplicates = listWithDuplicates.stream()
     .distinct()
     .collect(Collectors.toList());
}

至此,我们已经有了3个方法可用于删除List中的重复元素。

发表评论

电子邮件地址不会被公开。 必填项已用*标注