使用stream做list集合去重
时间: 2023-11-11 11:02:34 浏览: 89
可以使用 Java 8 中的 Stream API 来实现 List 集合去重。
假设有一个 List<String>,想要去除其中的重复元素,可以按照以下方式实现:
```java
List<String> list = Arrays.asList("A", "B", "C", "A", "B", "D");
List<String> distinctList = list.stream().distinct().collect(Collectors.toList());
```
上述代码中,首先将 List 转换为 Stream,然后调用 distinct() 方法去除重复元素,最后通过 collect() 方法将 Stream 转换回 List。去重后的结果为 ["A", "B", "C", "D"]。
需要注意的是,如果要对自定义对象进行去重,则需要在自定义对象中重写 equals() 和 hashCode() 方法。例如,对于一个 Person 类,可以按照以下方式实现去重:
```java
List<Person> personList = Arrays.asList(
new Person("张三", 20),
new Person("李四", 25),
new Person("王五", 20),
new Person("张三", 20)
);
List<Person> distinctPersonList = personList.stream().distinct().collect(Collectors.toList());
// Person 类的定义
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
```
上述代码中,重写了 Person 类的 equals() 和 hashCode() 方法,其中 equals() 方法根据对象的 name 和 age 字段判断是否相等,hashCode() 方法则根据 name 和 age 字段生成 hash 值。最终得到的 distinctPersonList 为 [Person{name='张三', age=20}, Person{name='李四', age=25}, Person{name='王五', age=20}]。
阅读全文
相关推荐
![java](https://img-home.csdnimg.cn/images/20250102104920.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![-](https://img-home.csdnimg.cn/images/20241231044901.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)