【问题标题】:How to combine 2 hashmaps into 1如何将 2 个 hashmap 组合成 1 个
【发布时间】:2020-03-19 18:18:35
【问题描述】:

有没有办法将两个 hashmap 组合成第三个 hashmap?

例子:

Hashmap 1 has  {key1, value1}, {key2, value2}, {key3, value3)
Hashmap 2 has  {key1, value1}, {key2, value2}
Hashmap 3 has  {key1, value1}, {key2, value2}, {key3, value3), {key1, value1}, {key2, value2}

下面是示例代码:

Map<String, Object> body1 = new HashMap<>();
Map<String, Object> body2 = new HashMap<>();
Map<String, Object> body = new HashMap<>();

table.getTableRows().forEach(row -> {
    String value = row.getCell(VALUE);
    String field = row.getCell(FIELD);

    if (body1.containsKey(field)) {
        body2.put(field, value);
    } else {
        body1.put(field, value);
    }
});

//Append both hashmaps into one - body

【问题讨论】:

  • hashmap1 中的key1 是否等同于hasmap2 中的key1?如果是这种情况,HashMap 键必须是唯一的。
  • 我相信可以use the merge method
  • 同一个键只能有一个值,即不能有{key1, value1} 两次或更多。每当您将条目添加为{key1, value1} 时,它将替换旧条目。

标签: java


【解决方案1】:

同一个键只能有一个值,即不能有{key1, value1} 两次或更多。每当您添加带有key1 的条目时,它将替换key1 的旧值。

如果您想将两张地图保存在一个集合中,则需要使用不同的集合,例如List。下面给出了一个使用List的演示:

import java.util.List;
import java.util.Map;

public class Main {
    public static void main(String args[]) {
        Map<String, Object> body1=Map.of("key1","value1","key2","value2","key3","value3");
        Map<String, Object> body2=Map.of("key1","value1","key2","value2");
        List<Map<String, Object>> body=List.of(body1,body2);
        for(Map<String, Object> map:body) {
            System.out.println(map);
        }
    }
}

输出:

{key1=value1, key2=value2, key3=value3}
{key2=value2, key1=value1}

【讨论】:

    【解决方案2】:

    如果地图中的键是唯一的,您可以使用Map.putAll(Map map):

    body.putAll(body1);
    body.putAll(body2);
    

    如果键不是唯一的,您可以执行以下操作:

        body.putAll(body1);
        for (Map.Entry entry : (Set<Map.Entry>)body2.entrySet()) {
            if (body.containsKey(entry.getKey())){
                  //either replace or keep old value
                  //body.replace(entry.getKey(), entry.getValue())
            } else {
                  body.put(entry.getKey(), entry.getValue());
           }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      • 2018-06-03
      • 2021-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多