zoukankan      html  css  js  c++  java
  • java List 排序

    1、Comparator

      方法为外部比较器,实例引用无法改变类本身,不能实现Comparable 接口 则推荐使用该方法

      代码实例:

    package blade;
    
    public class Person {
    
        private int id;
    
        private String name;
    
        private int age;
    
        private String description;
    
        public Person(int id, String name, int age, String description) {
            this.id = id;
            this.name = name;
            this.age = age;
            this.description = description;
        }
    
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getDescription() {
            return description;
        }
        public void setDescription(String description) {
            this.description = description;
        }
    
        @Override
        public String toString() {
            return "Person [id=" + id + ", name=" + name + ", age=" + age + ", description=" + description + "]";
        }
    }
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    
    import blade.Person;
    
    public class CollCompare {
        public static void main(String args[]) {
            List<Person> personList = new ArrayList<Person>();
            personList.add(new Person(5, "jack", 22, "今天天气不错!"));
            personList.add(new Person(2, "sufei", 22, "今天天气不错!"));
            personList.add(new Person(3, "tom", 45, "今天天气不错!"));
            personList.add(new Person(4, "luce", 22, "今天天气不错!"));
            personList.add(new Person(5, "ben", 6, "今天天气不错!"));
            personList.add(new Person(6, "judi", 70, "今天天气不错!"));
            Collections.sort(personList, new Comparator<Person>() {
                //
                @Override
                public int compare(Person person1, Person person2) {
                    if (person1.getAge() > person2.getAge()) {
                        return 1;
                    } else if (person1.getAge() == person2.getAge()) {
                        if (person1.getId() > person2.getId()) {
                            return 1;
                        } else {
                            return -1;
                        }
                    } else
                        return -1;
                }
            });
            for (int i = 0; i < personList.size(); i++) {
                System.out.println(personList.get(i).toString());
            }
        }
    }

      运行结果:

    Person [id=4, name=luce, age=2, description=今天天气不错!]
    Person [id=5, name=ben, age=6, description=今天天气不错!]
    Person [id=2, name=sufei, age=22, description=今天天气不错!]
    Person [id=5, name=jack, age=22, description=今天天气不错!]
    Person [id=3, name=tom, age=45, description=今天天气不错!]
    Person [id=6, name=judi, age=70, description=今天天气不错!]

      总结: param1 > param2 return 1 ------>  在 param1 > param2 的情况下 需要交换

          param1 = param2 return 0 ------> 相等情况下可以进行第二列比较

          param1 < param2 return -1 ------> 降序 param1 < param2 情况下 不需要交换

         (return 结果 > 0 需要交换, =0 可以进行第二列比较, <0 代表不需要交换

    2、Comparator

      方法为内部部比较器,实现Comparable接口 

      代码实例:

    package blade;
    
    public class Person2 implements Comparable<Person2>{
    
        private int id;
    
        private String name;
    
        private int age;
    
        private String description;
    
        public Person2(int id, String name, int age, String description) {
            this.id = id;
            this.name = name;
            this.age = age;
            this.description = description;
        }
    
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getDescription() {
            return description;
        }
        public void setDescription(String description) {
            this.description = description;
        }
    
        @Override
        public String toString() {
            return "Person [id=" + id + ", name=" + name + ", age=" + age + ", description=" + description + "]";
        }
    
        @Override
        public int compareTo(Person2 person2) {
            if (this.getId() > person2.getId()) {
                return 1;
            } else if (this.getId() == person2.getId()) {
                return 0;
            } else {
                return -1;
            }
        }
    }
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    import blade.Person2;
    
    public class CollCompare {
        public static void main(String args[]) {
            List<Person2> personList = new ArrayList<Person2>();
            personList.add(new Person2(5, "jack", 22, "今天天气不错!"));
            personList.add(new Person2(2, "sufei", 22, "今天天气不错!"));
            personList.add(new Person2(3, "tom", 45, "今天天气不错!"));
            personList.add(new Person2(4, "luce", 22, "今天天气不错!"));
            personList.add(new Person2(5, "ben", 6, "今天天气不错!"));
            personList.add(new Person2(6, "judi", 70, "今天天气不错!"));
            Collections.sort(personList);
            personList.stream().forEach(System.out::println);
        }
    }

      类中实现接口方法进行排序

    运行结果:

    Person [id=2, name=sufei, age=22, description=今天天气不错!]
    Person [id=3, name=tom, age=45, description=今天天气不错!]
    Person [id=4, name=luce, age=22, description=今天天气不错!]
    Person [id=5, name=jack, age=22, description=今天天气不错!]
    Person [id=5, name=ben, age=6, description=今天天气不错!]
    Person [id=6, name=judi, age=70, description=今天天气不错!]
  • 相关阅读:
    Arduino学习笔记 (五) -- 红外接收与解码
    Arduino学习笔记 (四) -- 常用函数
    VSCode 基础必备插件
    Arduino学习笔记 (三) -- 语言基本概念
    Arduino学习笔记 (二) -- 常见板型
    Arduino学习笔记 (一) -- 概述
    一个好玩的东西:页面点击鼠标左键显示浮动文字
    Python多线程
    Nginx配置转发
    阿里云(CentOs)搭建SVN服务
  • 原文地址:https://www.cnblogs.com/lixuchun/p/8867573.html
Copyright © 2011-2022 走看看