gpt4 book ai didi

java - 如何在java中合并两个嵌套的HashMap

转载 作者:行者123 更新时间:2023-12-02 09:11:03 64 4
gpt4 key购买 nike

我有两个嵌套映射,我尝试合并两个嵌套映射并生成两个合并的 HashMap 的输出。下面是我使用的代码:

HashMap<String, Object> map = new HashMap<>();

HashMap<String, Object> map1 = new HashMap<>();
map1.put("location", "A");
HashMap<String, Object> map2 = new HashMap<>();
map2.put("geocoordinates", map1);
HashMap<String, Object> map3 = new HashMap<>();
map3.put("TEST", map2);
map.putAll(map3);

HashMap<String, Object> map11 = new HashMap<>();
map11.put("longitude", "B");
HashMap<String, Object> map12 = new HashMap<>();
map12.put("geocoordinates", map11);
HashMap<String, Object> map13 = new HashMap<>();
map13.put("TEST", map12);

map.putAll(map13);
System.out.println(map);

我得到的输出是:

   {TEST={geocoordinates={longitude=B}}}

但我希望 longitudelocation 键都嵌套在 geocoordinates 键内,但只有 longitude B 是那里。那么,我怎样才能合并。如何实现这一目标?

最佳答案

按如下方式进行:

import java.util.HashMap;

public class Main {
public static void main(String[] args) {
HashMap<String, Object> map = new HashMap<>();

HashMap<String, Object> map1 = new HashMap<>();
map1.put("location", "A");
HashMap<String, Object> map2 = new HashMap<>();
map2.put("geocoordinates", map1);
HashMap<String, Object> map3 = new HashMap<>();
map3.put("TEST1", map2);
map.putAll(map3);

HashMap<String, Object> map11 = new HashMap<>();
map11.put("longitude", "B");
HashMap<String, Object> map12 = new HashMap<>();
map12.put("geocoordinates", map11);
HashMap<String, Object> map13 = new HashMap<>();
map13.put("TEST2", map12);

map.putAll(map13);

System.out.println(map);
}
}

输出:

{TEST2={geocoordinates={longitude=B}}, TEST1={geocoordinates={location=A}}}

原因:当您在同一键上放置新值时,Map 会替换旧值(在您的情况下,它是 TEST )。请注意,HashMap.putAll() 将所有映射从一个映射复制到另一个映射。在您的代码中,map.putAll(map3) 相当于 map.put("TEST",map3)。并且,map.putAll(map13)相当于map.put("TEST",map13),它替换了之前的值map3,因为相同的 key ,TEST

更新:根据您评论中提到的新要求添加以下更新

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class Main {
public static void main(String[] args) {
HashMap<String, Object> map = new HashMap<>();
List<HashMap> list=new ArrayList<HashMap>();

HashMap<String, Object> map1 = new HashMap<>();
map1.put("location", "A");
list.add(map1);

HashMap<String, Object> map11 = new HashMap<>();
map11.put("longitude", "B");
list.add(map11);

HashMap<String, Object> map2 = new HashMap<>();
map2.put("geocoordinates", list);

map.put("TEST",map2);

System.out.println(map);
}
}

输出:

{TEST={geocoordinates=[{location=A}, {longitude=B}]}}

另一种方法如下:

import java.util.HashMap;

public class Main {
public static void main(String[] args) {
HashMap<String, Object> map1 = new HashMap<>();
map1.put("location", "A");
map1.put("longitude", "B");

HashMap<String, Object> map2 = new HashMap<>();
map2.put("geocoordinates", map1);

HashMap<String, Object> map = new HashMap<>();
map.put("TEST", map2);

System.out.println(map);
}
}

输出:

{TEST={geocoordinates={location=A, longitude=B}}}

关于java - 如何在java中合并两个嵌套的HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59415669/

64 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com