黑马程序员技术交流社区

标题: 【黑马程序员济南】Java比较器之Comparator [打印本页]

作者: 大山哥哥    时间: 2017-8-28 13:58
标题: 【黑马程序员济南】Java比较器之Comparator
本帖最后由 大山哥哥 于 2017-8-28 14:04 编辑

    在我们日常java工作开发中,排序是一个比较常见的需求点,有的时候会对字符串、数组、日期等进行排序,都比较简单,但是如何对对象按照一定规则进行排序,则相对比较复杂,下面,简单说明一下java中接口Comparator所提供的比较排序方案。    假设一个场景:
        公司人员管理中,需要在前台展示的时候对人员进行排序显示,年龄越大,排序越靠前。
    首先,准备一个简单的实体类 User
[Java] 纯文本查看 复制代码
public class User {
        private String name;
        private Integer age;
        
        public User() {
        }
        
        public User(String name, Integer age) {
                this.name = name;
                this.age = age;
        }
        @Override
        public String toString() {
                return "User [name=" + name + ", age=" + age + "]";
        }

        //省略get set 方法
}

    第二,准备好测试数据
[Java] 纯文本查看 复制代码
private static List<User> getOrigUser() {
                //准备很多人员--姓名后面的数组为了排序显示方便
                User user1 = new User("王大哈21", 21);
                User user2 = new User("王二哈45", 45);
                User user3 = new User("王三哈23", 23);
                User user4 = new User("王四哈30", 30);
                User user5 = new User("王五哈28", 28);
                User user6 = new User("王六哈20", 20);
               
                List<User> users = new ArrayList<User>();
                users.add(user1);
                users.add(user2);
                users.add(user3);
                users.add(user4);
                users.add(user5);
                users.add(user6);
                //users是我们拿到的初始的数据,
                return users;
        }

    第三步,准备自定义比较器,做比较处理
[Java] 纯文本查看 复制代码
//java.util.Comparator
public class MyUserComparator implements Comparator<User>{

        /**
         * 在该方法中,可以自行定义其他复杂的比较
         * 比如年龄相同,如果有性别,女性可以排序靠前等
         */
        @Override
        public int compare(User user1, User user2) {
                //年龄顺序排列
                //return user1.getAge() - user2.getAge();
                //年龄倒序排列
                return user2.getAge() - user1.getAge();
        }
}

    第四步,测试。使用Arrays的sort方法进行排序。
[Java] 纯文本查看 复制代码
        public static void main(String[] args) {
                //获得原始数据
                List<User> users = getOrigUser();
                //将集合转成数组
                User[] array = users.toArray(new User[0]);
                //排序
                Arrays.sort(array,new MyUserComparator());
                //打印结果
                for (User user : array) {
                        System.out.println(user.getName());
                }
        }


    结果如下:
[Java] 纯文本查看 复制代码
王二哈45
王四哈30
王五哈28
王三哈23
王大哈21
王六哈20


    本次demo仅仅是做了一个简单的排序测试,但是要想抽取成工具类,则需要重构自定义Comparator。

SortProj.zip

7.25 KB, 下载次数: 109


作者: jingxian90    时间: 2017-8-28 14:13
通俗易懂 条理清晰 简明扼要
作者: Oliverwqcwrw    时间: 2017-8-28 14:34
可以可以,加油↖(^ω^)↗





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2