A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 大山哥哥 于 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, 下载次数: 71

评分

参与人数 1黑马币 +1 收起 理由
jingxian90 + 1 很给力!

查看全部评分

2 个回复

倒序浏览
通俗易懂 条理清晰 简明扼要
回复 使用道具 举报
可以可以,加油↖(^ω^)↗
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马