public List<Map> process(List<Map> data)
data的数据格式:
[{count=1588847, adress=南京}, {count=973476, adress=南通}, {count=371132, adress=总部},……];List中有多个Map,每个Map中只有count、adress 2个键值对。要求传入一个无序的data list,返回的按count倒序,期中如果adress出现"总部",那么就把总部在第一条,其他城市在总部之后按count倒序排列。
我是用2个Comparator自定义排序做的,第一个按count倒序排,然后再把得到的list 按adress排,结果adress排是对的了,但是count排就没了。 总之不好结合一起用。求指教,在线等。Comparator List 排序

解决方案 »

  1.   

    自己才学水平不足,看到楼主题目思路如下:遍历,把地址是总部的存入一个,内部按照序号排列;非总部的存入一个,存入时候直接排序存入;然后清空原来的把第1个,第2个分别存入原集合。MAP的就记得treemap可以排序,新手实现困难,明天过了,后天上班时候我尝试写下,写出来了回头贴上来,写不出来我就继续学习……
      

  2.   

    既然总部是特例,就不如先把“总部”单独拿出来,将剩余数据排序。
    遍历一遍data,取出总部,对剩余data用comparator按count逆序排序,再将总部的数据与排序好的数据合并
      

  3.   

    package com.zbiti.plugins.multidimension;import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;public class MdPluginsManager {
    /**
     * 多维插件入口
     * 
     * @param
     * @return
     * @author Andsion
     */
    public List<Map> process(List<Map> data, String arg, String xField,
    List<String> yFields) {
    List<Map> returnList = new ArrayList<Map>(); // 调用该方法返回的List
    List<Map> dsList = new ArrayList<Map>(); // 用于保存非集团本部的List
    // 1.判断List中是否有本部,如果有则将其加入到本部list中
    for (int i = 0; i < data.size(); i++) {
    if (data.get(i).get("REGION_OUT").toString().indexOf("本部") > 0) {
    // 如果存在集团本部数据、即将其先加入返回的List中,达到数据在上的效果。
    returnList.add(data.get(i));
    } else {
    // 非集团本部的数据保存在地市的list中,后面做排序使用
    dsList.add(data.get(i));
    }
    }
    /* 地市list排序前输出
     * for (int i = 0; i < dsList.size(); i++) {
     * System.out.println("地市List排序前---" +
     * dsList.get(i).get("REGION_OUT").toString() + "-----" +
     * dsList.get(i).get("USERCOUNTS").toString()); }
     */
    // 地市list按USERCOUNTS降序排列
    Collections.sort(dsList, new Comparator<Map>() {
    public int compare(Map o1, Map o2) {
    return (Integer) o1.get("USERCOUNTS") > (Integer) o2
    .get("USERCOUNTS") ? ((Integer) o1.get("USERCOUNTS") == (Integer) o2
    .get("USERCOUNTS") ? 0 : -1) : 1;
    }
    }); /* 地市list排序后输出
     * for (int i = 0; i < dsList.size(); i++) {
     * System.out.println("ds排序后---" +
     * dsList.get(i).get("REGION_OUT").toString() + "-----" +
     * dsList.get(i).get("USERCOUNTS").toString()); }
     */ // 地市list排序完成后,再加入到返回的list中
    returnList.addAll(dsList);
    return returnList;
    } public void sort(List<Map<String, Object>> list) {
    Collections.sort(list, new Comparator<Map<String, Object>>() {
    public int compare(Map<String, Object> o1, Map<String, Object> o2) {
    return (Integer) o1.get("USERCOUNTS") > (Integer) o2
    .get("USERCOUNTS") ? ((Integer) o1.get("USERCOUNTS") == (Integer) o2
    .get("USERCOUNTS") ? 0 : -1) : 1;
    }
    });
    } }
    谢谢各位,解决了!