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()方法的;其实还可以专门单独写一个比较器类,在测试类中调用即可。

     
  • 相关阅读:
    docker usage (2)
    Linux command
    Postgresql 教程
    visual env VS conda environment of python
    Django教程(1)
    发生android.view.ViewRoot$CalledFromWrongThreadException异常的解决方案(转载http://daydayup1989.iteye.com/blog/784831)
    如何保留小数点后一位
    (四)详解android:scaleType属性
    (三)android布局基础及范例:人人android九宫格布局(转载http://blog.csdn.net/jiabinjlu/article/details/6921008)
    (二)android中在xml文件中使用View在某个控件的上方画一条线;android:listSelector的属性说明;android:visibility="gone"
  • 原文地址:https://www.cnblogs.com/xieegai/p/8298614.html
Copyright © 2011-2022 走看看