Java 8流从List中的Map读取值

时间:2018-05-14 10:02:08

标签: java java-stream

我不想使用foreach和循环。我想在Java 8中使用流来在List里面的Map中找到值

List<Map<String, Boolean>> types = ...

map.stream().filter(...

问题是在过滤器中我无法按键/值对进行搜索。

  

我想用boolean = true

获取所有元素

我做错了什么?

2 个答案:

答案 0 :(得分:3)

对条目集进行流式处理:

types.stream()                               // stream of maps
    .flatMap(map -> map.entrySet().stream()) // flat map to stream of map entries
    .filter(Map.Entry::getValue)             // filter for value == true
    .map(Map.Entry::getKey)                  // get the key
    .collect(Collectors.toList());           // collect

如果您最终得到键/值对列表,则可以删除.map(Map.Entry::getKey)

答案 1 :(得分:1)

    List<Map<String, Boolean>> types = new ArrayList<>();

    Map<String, Boolean> myMap = new HashMap<>();
    Map<String, Boolean> myMap2 = new HashMap<>();

    myMap2.put("Meric", true);
    myMap2.put("BERBER", false);
    types.add(myMap2);

    myMap.put("TEST1", true);
    myMap.put("TEST2", false);
    types.add(myMap);


    types.stream()
            .flatMap(map -> map.entrySet().stream())
            .filter(Map.Entry::getValue)
            .map(Map.Entry::getKey)
            .forEach(System.out::println);

并输出

 Meric
 TEST1