stream流去重对象中的某个元素
时间: 2023-07-25 09:11:01 浏览: 101
在 Java 中,如果要对一个对象列表中的某个元素进行去重,可以使用 Stream 的 distinct() 方法和 map() 方法结合使用。具体实现步骤如下:
1. 首先定义一个对象类,例如:
```
public class User {
private String name;
private int age;
// 构造方法和 getter/setter 略
}
```
2. 假设有一个 List<User> 类型的列表,现在要按照 name 字段进行去重,可以使用以下代码:
```
List<User> userList = Arrays.asList(
new User("Tom", 20),
new User("Jerry", 18),
new User("Tom", 25),
new User("Lucy", 22),
new User("Jerry", 18)
);
List<User> distinctList = userList.stream()
.map(user -> user.getName()) // 将 User 对象映射为 name 字段
.distinct() // 进行去重操作
.map(name -> userList.stream()
.filter(user -> user.getName().equals(name)) // 根据 name 进行过滤
.findFirst().get())
.collect(Collectors.toList()); // 将结果转换为 List
System.out.println(distinctList);
```
在上述代码中,首先使用 map() 方法将 User 对象映射为 name 字段,接着使用 distinct() 方法进行去重操作。然后再次使用 map() 方法,将 name 字段映射回 User 对象,并使用 filter() 方法根据 name 字段进行过滤。最后使用 findFirst() 方法获取符合条件的第一个元素,并使用 collect() 方法将结果转换为 List。运行上述代码后,输出结果为:
```
[User{name='Tom', age=20}, User{name='Jerry', age=18}, User{name='Lucy', age=22}]
```
可以看到,输出结果中已经按照 name 字段进行了去重。
阅读全文