Java 8流从列表中的映射读取值

Java 8流从列表中的映射读取值,java,java-stream,Java,Java Stream,我不想使用foreach和loop。我想使用Java8中的流在列表中的映射中查找值 List<Map<String, Boolean>> types = ... map.stream().filter(... 列表类型=。。。 map.stream().filter(。。。 问题是,在筛选器中,我无法按键/值对进行搜索 我想得到布尔值为true的所有元素 我做错了什么?通过条目集进行流式处理: types.stream()

我不想使用foreach和loop。我想使用Java8中的流在列表中的映射中查找值

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

map.stream().filter(...
列表类型=。。。
map.stream().filter(。。。
问题是,在筛选器中,我无法按键/值对进行搜索

我想得到布尔值为true的所有元素


我做错了什么?

通过条目集进行流式处理:

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)

在条目集上流动:

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

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

所有映射的元素,其中哪个键映射到
true
?是布尔类型=trueYes的所有元素您做错了。您有一个名为
types
,然后调用
map.stream()
我们不知道
map
从哪里来,也不知道它是什么(我们知道它不是
map
,因为没有
map.stream()
)。所有映射的元素,其中哪个键映射到
true
?是布尔类型=true的所有元素是您做错了。您有一个名为
types
的变量,然后您调用
map.stream()
,我们不知道
map
来自何处或它是什么(我们知道它不是
Map
,因为没有
Map.stream()
)。
    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);