【发布时间】:2020-10-25 03:44:05
【问题描述】:
我有一个嵌套的HashMap 和String 键,其中包含List、Map 或String 值。我想像下面那样把它们弄平。
这是数据:
import java.util.*;
import java.util.stream.*;
public class MyClass {
public static void main(String args[]) {
Map<String, Object> dates = new HashMap<String, Object>() {{
put("1999", new HashMap<String, Object>() {{
put("3", Arrays.asList("23", "24", "25"));
put("4", Arrays.asList("1", "2", "3"));
}});
put("2001", new HashMap<String, Object>() {{
put("11", new HashMap<String, Object>() {{
put("7", Arrays.asList("23", "24", "25"));
put("9", Arrays.asList("1", "2", "3"));
}});
put("12", "45");
}});
}};
System.out.println(dates);
}
}
地图看起来像:
{2001={11={7=[23, 24, 25], 9=[1, 2, 3]}, 12=45},
1999={3=[23, 24, 25], 4=[1, 2, 3]}}
地图的扁平化应该是这样的:
{2001.11.7.1=23, 2001.11.7.2=24, 2001.11.7.3=25, 2001.11.9.1=1, 2001.11.9.2=2,
2001.11.9.3=3, 2001.12=45, 1999.3.1=23, 1999.3.2=24, 1999.3.3=25,
1999.4.1=1, 1999.4.2=2, 1999.4.3=3}
注意:嵌套数组或映射的层级未知,可能超过2层。
【问题讨论】:
-
如果不知道级别的数量,您应该考虑实施递归方法。为此,请考虑递归部分和递归的结束条件。
-
@genius42 是的,我需要一些东西来检查,直到没有地图或数组并且一切都变平为止。问题是我是java新手,不明白如何实现这个,这就是我在这里发布问题的原因。我非常感谢有解释的解决方案。
-
我目前没有时间为您提供解决方案。我可以稍后或明天做。但是给您一个想法:查看您拥有的不同案例(地图或列表)并处理它们。地图应该递归处理,而列表不应该。
标签: java arrays list hashmap flatten