1、大家都知道set集合是么有重复的,所以将list集合转换成set集合就会自动去除重复元素。当然也可以循环list去重这种比较简单的方法。
public static List remove(List list) {
HashSet h = new HashSet(list);
list.clear();
list.addAll(h);
return list;
}
2、但是我们会发现,如果list里面存的是两个相同的对象时候是没办法简单去重的,这个时候改怎么办呢?这时候就要用上 对象中重写equals()方法和hashCode()方法,将这两个方法重写在对应的对象类中
//重写equals方法
@Override
public boolean equals(Object obj) {
Object obj= (Object ) obj;
return name.equals(obj.getName()) && (age==obj.geId());
}
//重写hashCode方法
@Override
public int hashCode() {
String str = name + Id;
return str.hashCode();
}
3、使用Java8新特性stream去重
复制代码
//根据name属性去重
List unique1 = userList.stream().collect(
collectingAndThen(
toCollection(() -> new TreeSet<>(comparing(User::getName))), ArrayList::new));
System.out.println(unique1.toString());
//根据name,age属性去重
List<User> unique2 = userList.stream().collect(
collectingAndThen(
toCollection(() -> new TreeSet<>(comparing(o -> o.getName() + ";" + o.getAge()))), ArrayList::new)
);
System.out.println(unique2.toString());