【问题标题】:How to merge 2 ArrayList<HashMap<String, String>> into 1, based on key values?如何根据键值将 2 ArrayList<HashMap<String, String>> 合并为 1?
【发布时间】:2017-11-24 02:45:00
【问题描述】:

我有 2 个ArrayList &lt; HashMap &lt; String, String&gt;&gt;

list1: [{name=Alice, count=193}, {name=Bob, count=13}, {name=Charlie, 计数=179},...]

list2: [{name=Alice, change=1}, {name=Bob, change=15}, {name=Jimmy, 更改=15},...]

list2 中存在的所有键值都存在于list1 中,但反之则不然。例如。由于查理有零零钱,他不在list2 中。我想根据键值(名称)合并这两个列表以创建一个新的list3

list3: [{name=Alice, count=193, change=1}, {name=Bob,count=13, change=15}, {name=Charlie, count=179, change=0}, ...]

【问题讨论】:

  • 为什么要使用键值对列表?你不应该改用简单的Map 吗?
  • 数据来自 json 源,所以我只是将其解析并放入 HashMap

标签: java android arraylist hashmap


【解决方案1】:

假设list1list2 不包含重复的names,您可以这样做:

    //list3 created.
    for(HashMap<String,String> hm2:list2){
        String nameValue=hm2.get("name");
        for(HashMap<String,String> hm1:list1){
            if(hm1.get("name").equalsIgnoreCase(nameValue)){
                HashMap<String,String> tempMap = new HashMap();
                tempMap.put("name",nameValue);
                tempMap.put("count",hm1.get("count"));
                tempMap.put("change",hm2.get("change"));
                list3.add(tempMap);
                break;
            }
        }

    }
    System.out.println(list3);

【讨论】:

    【解决方案2】:

    你可以:

    1/ 创建一个名为Account 的类,其中包含namecountchange,则结果将是Account 的列表(如果您不想创建新类,可以跳过这一步)

    2/ 来自list2 构建一个HashMap&lt;String (name), Integer (change)&gt;

    3/ 遍历list1,其中每个元素,在步骤2中构建的HashMap基础上找到对应的change,然后构建一个Account(或一个包含所有信息的HashMap ),将帐户(或HashMap)添加到list3

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 2014-01-02
      • 2012-07-13
      • 1970-01-01
      相关资源
      最近更新 更多