java – 将Map的嵌套地图值“移动”到顶层
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 将Map的嵌套地图值“移动”到顶层,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1519字,纯文字阅读大概需要3分钟。
内容图文
获取已转换为Map< String,Object>的JSON:
{
"key1": "value1",
"key2": {
"nestedKey1": "nested value",
"nestedKey2": {
"nestedKey1": "nested value"
}
}
}
其中Object值可以是某种原始类型或嵌套Map< String,Object>.
我的目标是获得一张平面地图:
{
"key1": "value1",
"key2.nestedKey1": "nested value",
"key2.nestedKey2.nestedKey1": "nested value"
}
怎么样?任何已经做过的图书馆?
解决方法:
是的,您也可以在Java8中完成.
主要测试方法:
Map<String, Object> in = new HashMap<>();
in.put("key1", "val1");
Map<String, Object> lvl1 = new HashMap<>();
lvl1.put("key2", "val2");
lvl1.put("key3", Collections.singletonMap("k3", "v3"));
in.put("key2", lvl1);
Map<String, Object> out = flatten(in);
变压器方法:
private Map<String, Object> flatten(Map<String, Object> in) {
return in.entrySet().stream()
.flatMap(entry -> flatten(entry).entrySet().stream())
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue));
}
private Map<String, Object> flatten(Map.Entry<String, Object> in) {
// for other then Map objects return them
if (!Map.class.isInstance(in.getValue())) {
return Collections.singletonMap(in.getKey(), in.getValue());
}
// extract the key prefix for nested objects
String prefix = in.getKey();
Map<String, Object> values = (Map<String, Object>) in.getValue();
// create a new Map, with prefix added to each key
Map<String, Object> flattenMap = new HashMap<>();
values.keySet().forEach(key -> {
// use a dot as a joining char
flattenMap.put(prefix + "." + key, values.get(key));
});
// use recursion to flatten the structure deeper
return flatten(flattenMap);
}
内容总结
以上是互联网集市为您收集整理的java – 将Map的嵌套地图值“移动”到顶层全部内容,希望文章能够帮你解决java – 将Map的嵌套地图值“移动”到顶层所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。