Java对List中的对象去重-爱代码爱编程
Java对List中的对象去重
前言
下边我会针对List<String>基本类型,以及 List<User> 这种JavaBean对象去重(根据某个字段比较去重)。
验证
一、对List<String>基本类型去重
List<String> strList = new ArrayList<>();
strList.add("aaa");
strList.add("bbb");
strList.add("aaa");
//方法一:通过set去重
Set<String> strSet = new HashSet<>(strList);
//方法二:通过java8新特性
List<String> stringList = strList.stream().distinct().collect(Collectors.toList());
二、对List<User>对象类型去重
public class Test {
public static void main(String[] args) {
List<User> userList = new ArrayList<>();
userList.add(new User(111L,"aaa",18));
userList.add(new User(222L,"bbb",18));
userList.add(new User(333L,"ccc",18));
userList.add(new User(444L,"aaa",18));
//方法一:根据java8新特性去重
ArrayList<User> users1 = userList.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(User::getName))), ArrayList::new));
System.out.println(users1);
//方法二:根据map去重
Map<String, User> map = new HashMap<>();
for (User user : userList) {
String name = user.getName();
if (!map.containsKey(name)){
map.put(name,user);
}
}
List<User> users2 = new ArrayList<>();
for (String name : map.keySet()) {
users2.add(map.get(name));
}
System.out.println(users2);
//方法三:重写User对象的equals和hashCode方法,再使用Set去重
Set<User> userSet = new HashSet<>(userList);
List<User> users3 = new ArrayList<>(userSet);
System.out.println(users3);
}
}
@Data
class User{
private Long id;
private String name;
private Integer age;
public User(Long id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
//方法三:重写equals和hashCode方法
@Override
public boolean equals(Object o) {
User user = (User) o;
return this.name.equals(user.getName());
}
@Override
public int hashCode() {
return this.name.hashCode();
}
}
结语
如有问题,还望告知。不胜感激!
这篇文章对你有帮助的话,动动你可爱的小手指,点个赞再走吧。非常感谢!