【发布时间】:2022-01-17 16:43:30
【问题描述】:
有一个MapA,它可能包含MapB,而MapB可能包含MapC……,下面是MapA结构,
Map<String, Object> mapA = new HashMap<>();
Map 中的数据会是这样的
[
K1=V1,
K2=V2,
K3=V3,
node1={K11=V11, K12=V12, node11={K111=V111, K112=V112, K113=V113}, K13=V13, K14=V14},
K4=V4
]
现在我希望这些将所有这些键值合并到一个 Map 中,就像
[
K1=V1,
K2=V2,
K3=V3,
K11=V11,
K12=V12,
K111=V111,
K112=V112,
K113=V113,
K13=V13,
K14=V14,
K4=V4
]
我写了一个类似下面的函数
private Map<String, Object> getMap (Map<String, Object> map) {
Map<String, Object> mmm = new HashMap<>();
for (Map.Entry<String, Object> entry : map.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
if (value instanceof Map) {
mmm.putAll(getMap((Map<String, Object>) value));
return mmm;
}
mmm.put(key, value);
}
return mmm;
}
【问题讨论】:
-
“结果不正确”。究竟是什么方式?
-
你得到了什么输出?
-
@tgdavies 我得到的结果是缺少一些字段,例如缺少K4,K13,K14也缺少
-
我已经弄清楚发生了什么。不能在
if语句中return mmm,如果返回,会丢失map后面的字段。 -
@GBMan 你为什么放
java-stream标签?您需要使用 Stream API 来实现吗?
标签: java java-stream