赞
踩
- //实体类 如果自定义比较器可以不实现Comparable接口
- public class User implements Comparable<User>{
- private String name;
- private Integer age;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
-
- public Integer getAge() {
- return age;
- }
-
- public void setAge(Integer age) {
- this.age = age;
- }
-
- @Override
- public String toString() {
- return "User{" +"name='" + name + '\'' +", age=" + age +'}';
- }
-
- @Override
- public int compareTo(User user) {
- return this.age-user.age;
- }
- }
1.使用 Collections 工具类中的 sort() 方法( list是空集合不会报错,如果是null回报npe)
参数不同: Collections.sort(List list) 在自定义类User里面实现Comparable<User>接口,并重写抽象方法compareTo(Student o); //基本不用
Collections.sort(List list, Comparator c) 第二个参数为了省事,可以直接使用匿名内部类
- public static void main(String[] args) {
- User user1 = new User();
- user1.setName("a");
- user1.setAge(211);
-
- User user2 = new User();
- user2.setName("b");
- user2.setAge(985);
-
- User user3 = new User();
- user3.setName("c");
- user3.setAge(666);
-
- User user4 = new User();
- user4.setName("d");
- user4.setAge(985);
- List<User> userList = Arrays.asList(user1,user2,user3,user4);
- System.out.println(userList);
- String myName="e";
-
-
- Collections.sort(userList);
- // 使用 Comparator 自定义排序规则
- Collections.sort(userList, Comparator.nullsLast(Comparator.naturalOrder()));
-
- Collections.sort(userList, new Comparator<User>() {
- @Override
- public int compare(User o1, User o2) {
- //o1是后面的元素 o2是前面的元素
-
- //指定值排在第一位(比如我的成绩)
- if(myName.equals(o1.getName())){
- return -1;
- }
-
- //如果年纪不相等直接大的年纪在后
- if(o1.getAge()-o2.getAge()!=0){
- return o1.getAge()-o2.getAge();
- }
- return o1.getName().compareTo(o2.getName());
- }
- });
- System.out.println(userList);
- }
2.使用list本身的sort方法
java8使用 Comparator.comparing 进行多字段排序
- //studentsList本身元素会改变
- userList.sort(Comparator.comparing(User::getAge).reversed());
-
- userList.sort(new Comparator<User>() {
- @Override
- public int compare(User o1, User o2) {
- return o1.getAge() - o2.getAge()!=0?o1.getAge() - o2.getAge():o1.getName().compareTo(o2.getName());
- }
- });
-
- //studentsList作为数据源,本身元素不会改变
- List<User> studentsList= userList.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());
-
- //按照名称主排序;年龄副排序
- List<User> studentsList1 = userList.stream().sorted(Comparator.comparing(User::getName).thenComparing(
- User::getAge, (s1, s2) -> {
- return (s1 < s2) ? 1 : ((s1.intValue()== s2.intValue()) ? 0 : -1);
- })).collect(Collectors.toList());
另一文章: java list排序的两种方式(实现Comparable接口和Collections.sort重载方法)_qq_31459039的博客-CSDN博客_list实现comparable
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。