zoukankan      html  css  js  c++  java
  • List按对象元素自定义排序

    根据List对象的属性实现集合的自定义排序,我们主要有两种方式:
      一、比较对象实现Comparable接口,利用java.util.Collections.sort(List<T> list)方法实现自定义排序
      1.实体类(要比较的对象)
    public class User implements Comparable<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;
        }
    
        @Override
        public int compareTo(User o) {
            int compareTo = this.getName().compareTo(o.getName());
            return compareTo;  
        }
    }

      2.测试类

    public class Test {
    
        public static void main(String[] args) {
            User u1 = new User();
            u1.setId(1L);
            u1.setName("a");
            
            User u2 = new User();
            u2.setId(2L);
            u2.setName("bb");
            
            User u3 = new User();
            u3.setId(3L);
            u3.setName("ccc");
            
            List<User> list = new ArrayList<>();
            list.add(u2);
            list.add(u1);
            list.add(u3);
            
            for (User user : list) {
                System.out.println(user.getName());
            }
            System.out.println("*********************");
            
            // 升序
            Collections.sort(list);
            for (User user : list) {
                System.out.println(user.getName());
            }
            System.out.println("*********************");
            // 降序
            Collections.reverse(list);
            for (User user : list) {
                System.out.println(user.getName());
            }
        }
    }

      3.运行结果

    bb
    a
    ccc
    *********************
    a
    bb
    ccc
    *********************
    ccc
    bb
    a

      二、自定义比较器,实现Comparator接口,利用java.util.Collections.sort(List<T> list, Comparator<? super T> c)实现自定义排序

      1.实体类(要比较的对象,此时不用实现Comparable接口)

    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;
        }
    }

      2.测试类

    public class Test {
    
        public static void main(String[] args) {
            User u1 = new User();
            u1.setId(1L);
            u1.setName("a");
            
            User u2 = new User();
            u2.setId(2L);
            u2.setName("bb");
            
            User u3 = new User();
            u3.setId(3L);
            u3.setName("ccc");
            
            List<User> list = new ArrayList<>();
            list.add(u2);
            list.add(u1);
            list.add(u3);
            
            for (User user : list) {
                System.out.println(user.getName());
            }
            
            Collections.sort(list, new Comparator<User>() {
                /*  
                 * int compare(User o1, User o2) 返回一个基本类型的整型,  
                 * 返回负数表示:o1小于o2  
                 * 返回0 表示:o1和o2相等  
                 * 返回正数表示:o1大于o2 
                 */
                @Override
                public int compare(User o1, User o2) {
                    if (o1.getId() < o2.getId()) {
                        return -1;
                    }
                    if (o1.getId() == o2.getId()) {
                        return 0;
                    } 
                    return 1;
                }
            });
            
            System.out.println("*********************");
            for (User user : list) {
                System.out.println(user.getName());
            }
        }
    }

      3.运行结果

    bb
    a
    ccc
    *********************
    a
    bb
    ccc

      4.测试案例是直接在测试类内部重写compare()方法的;其实还可以专门单独写一个比较器类,在测试类中调用即可。

     
  • 相关阅读:
    一行代码更改博客园皮肤
    fatal: refusing to merge unrelated histories
    使用 netcat 传输大文件
    linux 命令后台运行
    .net core 使用 Nlog 配置文件
    .net core 使用 Nlog 集成 exceptionless 配置文件
    Mysql不同字符串格式的连表查询
    Mongodb between 时间范围
    VS Code 使用 Debugger for Chrome 调试vue
    css权重说明
  • 原文地址:https://www.cnblogs.com/xieegai/p/8298614.html
Copyright © 2011-2022 走看看