在java中合并两个带异常的映射
我想合并两个结构相似的地图: 这是第一张地图在java中合并两个带异常的映射,java,Java,我想合并两个结构相似的地图: 这是第一张地图 { "Profile": { "Location": { "City": "Some City", "State": "Some State", "Country": "USA" } }, "TimeLine": { "LifeEvents": {
{
"Profile": {
"Location":
{
"City": "Some City",
"State": "Some State",
"Country": "USA"
}
},
"TimeLine": {
"LifeEvents": {
"EventName": "Got Married",
"Date": "15-01-2000"
}
}
}
第二张地图是:
{
"Profile": {
"Office": {
"City": "New City",
"State": "New State",
"Country": "UK"
}
},
"TimeLine": {
"LifeEvents": {
"EventName": "Got Engaged",
"Date": "15-01-1999"
}
}
}
合并后,我希望它采用以下格式:
{
"Profile": {
"Office": {
"City": "New City",
"State": "New State",
"Country": "UK"
},
"Location": {
"City": "Some City",
"State": "Some State",
"Country": "USA"
}
},
"TimeLine": {
"LifeEvents": [
{
"EventName": "Got Engaged",
"Date": "15-01-1999"
},
{
"EventName": "Got Married",
"Date": "15-01-2000"
}
]
}
}
我尝试的解决方案是:
private static Map merge(Map original, Map newMap) {
for (Object key : newMap.keySet())
{
if (newMap.get(key) instanceof Map && original.get(key) instanceof Map)
{
Map originalChild = (Map) original.get(key);
Map newChild = (Map) newMap.get(key);
original.put(key, merge(originalChild, newChild));
}
else if (newMap.get(key) instanceof List && original.get(key) instanceof List)
{
List originalChild = (List) original.get(key);
List newChild = (List) newMap.get(key);
for (Object each : newChild)
{
if (!originalChild.contains(each))
{
originalChild.add(each);
}
}
} else
{
if(!original.containsKey(key)){
original.put(key, newMap.get(key));
}
}
}
return original;
}
有什么建议我可以修改上面的方法来处理我的需求吗?尽管上面给出的映射的结构是JSON格式的,但假设您将得到映射作为merge方法的输入。我正在使用
new Gson().fromJson(map1String,Map.class)
用于将JSON转换为映射。拥有第一个JSON{{
,在位置之后,真的吗?你指的是什么要求?@Aubin抱歉,这是一个打字错误。修复了它。@Izruo它在第三个JSON结构中。你发布了一个解决方案,你想修改它,所以我实际上在问:修改的要求是什么?-抱歉,不清楚。