gpt4 book ai didi

java - 在 Java 中展平嵌套的 Hashmap

转载 作者:行者123 更新时间:2023-12-04 08:40:33 24 4
gpt4 key购买 nike

我想展平嵌套的 HashMap 。例如,

Map<String, Object> map = new HashMap();
Map<String, Object> map2 = new HashMap();
Map<String, Object> map3 = new HashMap();
map3.put("key3", 123);
map2.put("key2", map3);
map2.put("key4", "test");
map.put("key1", map2);
map.put("key6", "test2");

这将具有类似于此的结构:

{
"key1" : {
"key2" : {"key3" : 123 },
"key4" : "test"
},
"key6" : "test2"
}

这应该被展平为具有类似于此结构的 HashMap :

{
"key1.key2.key3" : 123,
"key1.key4" : "test",
"key6" : "test2"
}

我尝试用 Java 递归地解决这个问题,但无法生成正确的形式。感谢您的帮助。

最佳答案

可以使用 Stream#flatMap 实现和递归。

flatMapper() 将被递归调用,它将返回一个附加了子键的字符串构建器流。

public class NestedHashMap {

private static Stream<StringBuilder> flatMapper(Map.Entry<String, Object> entrySet) {
Object value = entrySet.getValue();
if (value instanceof Map) {
return ((Map<String, Object>) value).entrySet()
.stream()
.flatMap(NestedHashMap::flatMapper)
.map(s -> s.insert(0, entrySet.getKey() + "."));

}
return Stream.of(new StringBuilder(entrySet.toString()));
}

public static void main(String[] args) {
// ... Code in the question

System.out.println(map.entrySet()
.stream()
.flatMap(NestedHashMap::flatMapper)
.collect(Collectors.joining(",\n\t", "{\n\t", "\t\n}")));
}
}

输出:

{
key1.key2.key3=123,
key1.key4=test,
key6=test2
}

关于java - 在 Java 中展平嵌套的 Hashmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64587115/

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