list.stream 根据对应的字段去重
时间: 2023-07-07 16:24:25 浏览: 108
您好!要根据List中的某个字段进行去重,可以使用Java 8中的Stream API。
假设我们有一个List<User>,每个User对象包含id和name属性,现在要根据id属性进行去重,可以使用以下代码:
```
List<User> userList = ...; // 假设我们已经有了一个List<User>对象
List<User> distinctList = userList.stream().collect(
Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(User::getId))),
ArrayList::new)
);
```
上面的代码中,我们使用了Stream的distinct()方法进行去重,并且使用了TreeSet和Comparator来按照id进行比较。注意,最后使用了ArrayList构造函数来将结果转换为List类型。
如果您使用的是Java 8之前的版本,可以使用以下代码:
```
List<User> userList = ...; // 假设我们已经有了一个List<User>对象
List<User> distinctList = new ArrayList<>(new TreeSet<>(new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
return o1.getId().compareTo(o2.getId());
}
}).addAll(userList).build());
```
上面的代码中,我们使用了TreeSet和Comparator来按照id进行比较,并且使用了addAll()方法将List中的元素添加到TreeSet中。最后,我们使用了build()方法将结果转换为List类型。
阅读全文