简体   繁体   English

Java 8流从列表中的Map读取值

[英]Java 8 stream read value from Map in List

I do not want to use foreach and loop. 我不想使用foreach和循环。 I want to use stream in Java 8 to find value in Map inside List 我想在Java 8中使用流在List内的Map中查找值

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

map.stream().filter(...

problem is that in filter I can not search by key/value pair. 问题是在过滤器中,我无法按键/值对进行搜索。

I want to get all elements with boolean = true 我想用boolean = true获取所有元素

I am doing something wrong? 我做错了吗?

Stream over the entry set: 流式进入条目集:

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

You can remove .map(Map.Entry::getKey) if you'd rather end up with a list of key/value pairs. 如果希望以键/值对的列表结尾,则可以删除.map(Map.Entry::getKey)

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

and output will be 和输出将是

 Meric
 TEST1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM