六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 30|回复: 0

List<Map> 自定义排序

[复制链接]

升级  8.4%

168

主题

168

主题

168

主题

进士

Rank: 4

积分
542
 楼主| 发表于 2013-2-3 13:35:09 | 显示全部楼层 |阅读模式
对list根据自定义方法排序记要

List list = dao.findAllToMap();//得到所有数据,结果封装成List<Map>ComparatorArea comparator = new ComparatorArea();Collections.sort(list, comparator); /**     * 对区块自定义排序,顺序从高到低如下:     *塔北     *  库车     *塔中     *塔西     *塔河     *盛业     *新疆     *     */    private class ComparatorArea implements Comparator{    Map<String,Integer> sortValue = new HashMap<String,Integer>();        public ComparatorArea(){    initSort();    }public int compare(Object p1, Object p2) {Object o1 = ((Map)p1).get("ITEM_AREA_NAME");Object o2 = ((Map)p2).get("ITEM_AREA_NAME");String key1 = o1 != null ? o1.toString() : "";String key2 = o2 != null ? o2.toString() : "";if(StringUtils.isEmpty(key1) && StringUtils.isEmpty(key2)){return 0;//都为null或空串,相等}else if(key1.equals(key2)){return 0;}else if(StringUtils.isEmpty(key1) && !StringUtils.isEmpty(key2)){return 1;//null或空串越向后靠}else if(!StringUtils.isEmpty(key1) && StringUtils.isEmpty(key2)){return -1;//null或空串越向后靠}else if(sortValue.get(key1) > sortValue.get(key2)){return 1;}else{return -1;}}    //排序顺序,value越大,排序越靠前private void initSort(){sortValue.put("新疆", 7);sortValue.put("盛业", 6);sortValue.put("塔河", 5);sortValue.put("塔西", 4);sortValue.put("塔中", 3);sortValue.put("库车", 2);sortValue.put("塔北", 1);}    }

如果排序对象是个实体类,实体类则直接实现Comparator接口,实现compare方法即可;实现Comparator接口时,可以使用泛型,如implements Comparator<User>;compare(User p1, User p2)
.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表