首页 > 代码库 > 多个List<Map<K,V>>整合去重--初次尝试

多个List<Map<K,V>>整合去重--初次尝试

 工作中遇到了,多个List<Map<K,V>>整合去重排序的问题,自己用比较笨拙的方法处理,希望大家有新的想法分享一下:

步骤1、整合Map集合的key值,去重后放到一个List集合里

List<Map<String, Object>> touping = new ArrayList<Map<String, Object>>();    List<Map<String, Object>> zong = new ArrayList<Map<String, Object>>();    List<Map<String, Object>> toupingNum = new ArrayList<Map<String, Object>>();    List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();    List<String> newlists = new ArrayList<String>();    Object[] arr=null;for(    int i = 0;i<touping.size();i++)    {        String key = touping.get(i).get("key").toString();        newlists.add(key);    } for(    int i = 0;i<zong.size();i++)    {        String key = zong.get(i).get("key").toString();        if (newlists.indexOf(key) == -1) {// 判断key是不是已经存在,属于去重手段            newlists.add(key);// 不存在z添加        }    } for(    int i = 0;i<toupingNum.size();i++)    {        String key = toupingNum.get(i).get("key").toString();        if (newlists.indexOf(key) == -1) {            newlists.add(key);        }    }

 

步骤2、(我的key值是时间,所以这用到了时间比较大小)将key值进行排序

  DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh");                            if(newlists.size()>0){                  Object arr=newlists.toArray();                  for(int i=0;i<arr.length-1;i++){                      for(int j = i+1 ; j < arr.length ; j++){                             Object temp ;                             Date dt1 = df.parse(arr[i].toString());                             Date dt2 = df.parse(arr[j].toString());                              if(dt1.getTime() > dt2.getTime()){//时间比较大小  Date.getTime()返回一个long型的毫秒值                              temp = arr[j];                              arr[j] = arr[i];                              arr[i] = temp;                             }                      }                 }              }

 

步骤3、整合生成最终结果

    if(arr!=null)    {        for (int i = 0; i < arr.length; i++) {            String key = arr[i].toString();            int a = 0;            int b = 0;            int c = 0;            for (Map<String, Object> map : zong) {                if (map.get("key").toString().equals(key)) {                    a = Integer.parseInt(map.get("a").toString());                }            }            for (Map<String, Object> map : touping) {                if (map.get("key").toString().equals(key)) {                    b = Integer.parseInt(map.get("b").toString());                }            }            for (Map<String, Object> map : toupingNum) {                if (map.get("key").toString().equals(key)) {                    double c1 = Double.parseDouble(map.get("c").toString());                    c = (int) c1;                }            }            Map<String, Object> resoultMap = new HashMap<String, Object>();            resoultMap.put("key", key);            resoultMap.put("a", a);            resoultMap.put("b", b);            resoultMap.put("c", c);            lists.add(resoultMap);        }    }

 

 

 

三步之后 ,集合lists就是我们想要的结果,不过表示很麻烦,刚工作不久,希望以后会想到更好的方法。。。

多个List<Map<K,V>>整合去重--初次尝试