java 使用 stream去重
时间: 2023-07-11 15:10:54 浏览: 151
详解Java8 Collect收集Stream的方法
您可以使用 Java 8 中的 Stream API 来对一个集合进行去重操作,具体实现如下:
```java
List<String> list = Arrays.asList("apple", "orange", "banana", "apple", "orange");
List<String> distinctList = list.stream().distinct().collect(Collectors.toList());
System.out.println(distinctList);
```
上述代码中,首先定义了一个包含多个重复元素的字符串集合 `list`,然后使用 `stream()` 方法将其转换为一个 Stream 对象,接着使用 `distinct()` 方法对 Stream 中的元素进行去重操作,最后使用 `collect()` 方法将去重后的元素重新收集到一个 List 集合中,得到的 `distinctList` 就是去重后的结果。
值得注意的是,上述代码中的 `distinct()` 方法使用了默认的元素比较器来进行去重操作。如果您需要根据自定义的比较规则来进行去重操作,可以使用 `distinct()` 方法的重载版本,该版本接受一个自定义的 `equals()` 方法实现作为参数,例如:
```java
List<Person> personList = Arrays.asList(
new Person("Tom", 20),
new Person("Jerry", 30),
new Person("Tom", 20),
new Person("Alice", 25)
);
List<Person> distinctPersonList = personList.stream().distinct()
.collect(Collectors.toList());
```
上述代码中,首先定义了一个包含多个重复元素的自定义类型 `Person` 的集合 `personList`,其中每个 `Person` 对象包含姓名和年龄两个属性。接着使用 `stream()` 方法将其转换为一个 Stream 对象,然后使用 `distinct()` 方法对 Stream 中的元素进行去重操作,由于 `Person` 类没有实现 `equals()` 方法,因此默认使用了 `Object` 类的 `equals()` 方法来进行对象比较,最终得到的 `distinctPersonList` 集合中只包含了不重复的 `Person` 对象。如果需要自定义 `equals()` 方法来进行去重操作,可以在 `Person` 类中实现该方法,例如:
```java
class Person {
private String name;
private int age;
// 构造方法和getter/setter方法省略
@Override
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof Person)) {
return false;
}
Person other = (Person) obj;
return this.name.equals(other.name) && this.age == other.age;
}
}
```
上述代码中,重写了 `Person` 类的 `equals()` 方法,当两个 `Person` 对象的姓名和年龄都相同时,认为它们是相等的。这样,在使用 `distinct()` 方法进行去重操作时,就会按照自定义的比较规则来进行对象比较。
阅读全文