使用java 8流过滤地图值

时间:2017-05-02 14:59:20

标签: java-8

我有一张如下地图,想要使用密钥检索内部地图的值。

<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));

2 个答案:

答案 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