jslfl 发表于 2013-2-3 13:35:09

List<Map> 自定义排序

对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)
.
页: [1]
查看完整版本: List<Map> 自定义排序