我不想使用foreach和循环。我想在Java 8中使用流来在List里面的Map中找到值
List<Map<String, Boolean>> types = ...
map.stream().filter(...
问题是在过滤器中我无法按键/值对进行搜索。
我想用boolean = true
获取所有元素
我做错了什么?
答案 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