ArrayList里的对象按照属性排序

来源:互联网 发布:数控车床编程培训教程 编辑:程序博客网 时间:2024/05/29 13:22

前天被面试问到在集合里的对象按照某个关键字去排序的问题,当时想到了两个解决方案。

  1. 如果结合ORM去考虑,我会在sqlmap里写sql语句的时候用order by去排序,这样查出来获得list就是有序的。不用去排序。
  2. 或则是将对象取出来,然后再单独对对象去排序放到arraylist里去。这种方法麻烦点,但是是最容易想到的解决方案。

今天在朋友建议下参考了API文档,发现原来Collections有静态方法sort去定义对象属性排序,解决方案如下:

//创建一个 User对象class User{    int id;    String name;    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 class SortTest {    public static void main(String args[])    {        //初始化一个list列表        List<User> list = new ArrayList<User>();        //初始化20个User对象,id随机        for(int i = 0;i < 10;i ++)        {            User user = new User();            user.setId((int)(Math.random() * 100));            user.setName("micro");            list.add(user);        }        //打印出        for(User user : list)        {            System.out.println("User的id:"+user.getId()+" User的name : "+user.getName());        }        //按照id去排序        Collections.sort(list, new Comparator<User>() {            @Override            public int compare(User user1, User user2) {                // TODO Auto-generated method stub                //定义比较大小                if(user1.getId() > user2.getId())                {                    return 1;                }                else if(user1.getId() == user2.getId())                {                    return 0;                }                else                {                    return -1;                }            }        });        System.out.println("排序结束");        //排序结束再输出        for(User user : list)        {            System.out.println("User的id:"+user.getId()+" User的name : "+user.getName());        }    }}

运行结果:

User的id:69 User的name : microUser的id:24 User的name : microUser的id:87 User的name : microUser的id:3 User的name : microUser的id:81 User的name : microUser的id:8 User的name : microUser的id:0 User的name : microUser的id:10 User的name : microUser的id:82 User的name : microUser的id:75 User的name : micro排序结束User的id:0 User的name : microUser的id:3 User的name : microUser的id:8 User的name : microUser的id:10 User的name : microUser的id:24 User的name : microUser的id:69 User的name : microUser的id:75 User的name : microUser的id:81 User的name : microUser的id:82 User的name : microUser的id:87 User的name : micro

如果降序排序修改为:

Collections.sort(list, new Comparator<User>() {            @Override            public int compare(User user1, User user2) {                // TODO Auto-generated method stub                //定义比较大小                if(user1.getId() > user2.getId())                {                    return 1;                }                else if(user1.getId() == user2.getId())                {                    return 0;                }                else                {                    return -1;                }            }        });

运行结果:

User的id:36 User的name : microUser的id:80 User的name : microUser的id:13 User的name : microUser的id:19 User的name : microUser的id:31 User的name : microUser的id:5 User的name : microUser的id:60 User的name : microUser的id:26 User的name : microUser的id:78 User的name : microUser的id:29 User的name : micro排序结束User的id:80 User的name : microUser的id:78 User的name : microUser的id:60 User的name : microUser的id:36 User的name : microUser的id:31 User的name : microUser的id:29 User的name : microUser的id:26 User的name : microUser的id:19 User的name : microUser的id:13 User的name : microUser的id:5 User的name : micro
0 0
原创粉丝点击