引言:
本文主要介绍通过JDK提供的原始的去重排序和使用Lambda表达式的形式进行集合中数据的去重和排序
一.环境准备:
1.实体类:
public class User {
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User() {
}
public User(Long id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
2.插入测试数据:
User u1 = new User(1L, "li");
User u2 = new User(2L, "哈哈");
User u3 = new User(1L, "li");
User u4 = new User(2L, "li");
List classList = new ArrayList();
classList.add(u1);
classList.add(u2);
classList.add(u3);
classList.add(u4);
二.根据name属性值的Ascll码进行排序,没有去重:
/**
* 按照List中的某个String类型的属性进行排序
*
* @param list
*/
Collections.sort(classList, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
User e1 = (User) o1;
User e2 = (User) o2;
return e1.getName().compareTo(e2.getName());
}
});
classList.forEach( e -> System.out.println(e));
三.通过name属性进行去重和重排序:
Set<User> set = new TreeSet<User>(new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
return o1.getName().compareTo(o2.getName());
}
});
set.addAll(classList);
List<User> list = new ArrayList<>(set);
list.forEach( e -> System.out.println(e));
四.采用lambda进行去重和排序:
List list1 = (List) classList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()->new TreeSet<>(Comparator.comparing(User::getName))), ArrayList::new));
list1.forEach( e -> System.out.println(e));
五.总结:
以上完成了对集合中的对象的属性进行去重和排序操作,使用lambda的方式显的代码少简单,但是不容易懂。