我有一张如下地图,想要使用密钥检索内部地图的值。
<bean id="testMap" class="java.util.HashMap">
<constructor-arg>
<map>
<entry key="A" value="AA" />
<entry key="B">
<map>
<entry key="B1" value="B11" />
<entry key="B2" value="B22" />
<entry key="B3" value="B33" />
</map>
</entry>
</map>
</constructor-arg>
</bean>
下面的代码打印第1级,如何打印内部地图值?
myMap.entrySet().stream().filter(map -> map.getKey().equals("B")).forEach(p -> System.out.println(p));
答案 0 :(得分:2)
答案不像大多数拥有嵌套地图的人那样直截了当,因为你有一个Map<String,Object>
。
重新创建您描述的地图:
Map<String,Object> map = new HashMap<>();
Map<String,String> bMap = new HashMap<>();
bMap.put("B1", "B11");
bMap.put("B2", "B22");
bMap.put("B3", "B33");
map.put("A", "AA");
map.put("B", bMap);
然后获取内部地图的值:
map.entrySet().stream()
.filter(entry -> entry.getKey().equals("B"))
.flatMap(entry -> ((Map<String,String>) entry.getValue()).values().stream())
.forEach(System.out::println);
打印:
B22
B33
B11
Holger在评论中提供了更短,更快的解决方案:
((Map<String,String>)map.get("B")).values().stream()
.forEach(System.out::println);
它在上面的解决方案中对地图条目进行单次查找而不是线性搜索,即它更快。
答案 1 :(得分:0)
你能试试吗?
Manifest