java – N级映射的递归合并
发布时间:2020-12-15 05:21:31 所属栏目:Java 来源:网络整理
导读:有没有办法在 Java中深入合并地图?我已经看过一些关于它的帖子,但大多数似乎解决方案似乎只处理一个级别的合并或者是乏味的. 我的数据结构(使用JSON字符串表示地图)看起来类似于: { name: "bob",emails: { home: "bob@home.com",work : "bob@work.com" } }
有没有办法在
Java中深入合并地图?我已经看过一些关于它的帖子,但大多数似乎解决方案似乎只处理一个级别的合并或者是乏味的.
我的数据结构(使用JSON字符串表示地图)看起来类似于: { name: "bob",emails: { home: "bob@home.com",work : "bob@work.com" } } 理想情况下,如果我有另一张地图 { emails: { home2: "bob@home2.com" } } 与第一张地图合并后会看起来像 { name: "bob",work : "bob@work.com",home2: "bob@home2.com } } 我可以保证我的所有地图都是< String,Object>.这是否有开箱即用的解决方案?我真的想避免自己为非常嵌套或大的对象编写一堆递归或迭代代码. 解决方法
改进版:
this gist
这是一种深度合并Java Maps的方法: // This is fancier than Map.putAll(Map) private static Map deepMerge(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,deepMerge(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 { original.put(key,newMap.get(key)); } } return original; } 适用于嵌套地图,对象和对象列表.请享用. (免责声明:我不是Java开发人员!) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |