多个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就是我们想要的结果,不过表示很麻烦,刚工作不久,希望以后会想到更好的方法。。。

时间: 2024-07-31 18:12:56

多个List<Map<K,V>>整合去重--初次尝试的相关文章

关于jsp利用EL和struts2标签来遍历ValueStack的东东 ------&gt; List&lt;Map&lt;K,V&gt;&gt; 以及 Map&lt;K,&lt;List&lt;xxx&gt;&gt;&gt; 的结构遍历

//第一种结构Map<K,<List<xxx>>> <body> <% //显示map<String,List<Object>> Map map = new HashMap<String,List<String>>(); List list = new ArrayList<String>(); list.add("list1-1"); list.add("list

简单组合java.util.Map&lt;K,V&gt;实现Map&lt;K,P,V&gt;

java.util.Map<K,V>为单键对单值,有时需要双键对单值,因此基于Map<K,V>可以简单实现一个Map<K,P,V>. 接口定义:下载 Java代码 package cc.lixiaohui.demo.javassist.proxy.util; import java.util.Collection; import java.util.Set; /** * 两个键的复合map * <pre> * key------+ *          |-

Cocos2d-x3.0模版容器详解之——cocos2d::Vector&lt;T&gt;, cocos2d::Map&lt;K,V&gt;, cocos2d::Value

Cocos2d-x3.0模版容器详解之一:cocos2d::Vector<T>  http://www.cocoachina.com/bbs/read.php?tid=199793Cocos2d-x3.0模版容器详解之二:cocos2d::Map<K,V>  http://www.cocoachina.com/bbs/read.php?tid=199916Cocos2d-x3.0模版容器详解之三:cocos2d::Value  http://www.cocoachina.com/b

cocos基础教程(4)数据结构介绍之cocos2d::Map&lt;K,V&gt;

1.概述 cocos2d::Map<K,V> 是一个内部使用了 std::unordered_map的关联容器模版. std::unordered_map 是一个存储了由key-value键值对组合成构成的关联性容器,允许基于键对单个元素进行快速检索. 2.模版参数 K - key value的类型. map中元素都由它的 key值作为唯一标识. V - mapped value的类型. T 必须是一个指向 cocos2d::Object 子类对象的指针. 3.内存管理 如果你在栈上声明了一个

Java------遍历Map&lt;k,v&gt;的方法

1. public class MapAction extends ActionSupport{ private Map<String, User> map = new HashMap<>(); public Map<String, User> getMap() { return map; } public void setMap(Map<String, User> map) { this.map = map; } @Override public Stri

Mybatis返回List&lt;Map&lt;K,V&gt;&gt;

最终映射的字段名 会被作为 hashMap 的 key , <!-- TODO 测试返回 HashMap--> <resultMap id="testResultMap" type="java.util.HashMap"> <result column="id" property="id" jdbcType="INTEGER" javaType="int"

Map&lt;K, V&gt; 中k,v如果为null就转换

Set<String> set = map.keySet(); if(set != null && !set.isEmpty()) { for(String key : set) { if(map.get(key) == null) { map.put(key, ""); } } } 原文地址:https://www.cnblogs.com/smileblogs/p/10332279.html

Cocos2d-x3.0模版容器具体解释之二:cocos2d::Map&amp;lt;K,V&amp;gt;

1.概述: 版本号: v3.0 beta 语言: C++ 定义在 "COCOS2DX_ROOT/cocos/base" 路径下的 "CCMap.h" 的头文件里. template <class K, class V> class CC_DLL Map; cocos2d::Map<K,V> 是一个内部使用了 std::unordered_map的关联容器模版. std::unordered_map 是一个存储了由key-value键值对组合成

Map.Entry&lt;K,V&gt;分析

一.好处 你是否已经对每次从Map中取得关键字然后再取得相应的值感觉厌倦? 1 Set keys = map.keySet( ); 2 if(keys != null) { 3 Iterator iterator = keys.iterator( ); 4 while(iterator.hasNext( )) { 5 Object key = iterator.next( ); 6 Object value = map.get(key); 7 } 8 } 二.用法 使用Map.Entry类,你可