[英]Java 8 get a list out of map based on condition
我有一个Item
类:
public class Item {
String name;
double price;
// Getters & Setters
}
现在我有一个地图作为Map<String, List<Item>> map;
此映射包含项目的名称和具有相同名称的相应项目列表。
现在我想找出符合过滤条件的所有项目列表。
这是我的过滤器List<String> filter
它基本上包含我需要从地图中过滤的所有名称列表,并将所有选定的项目作为最终列表。
List<Item> output = new ArrayList<>();
filter.forEach(item -> {
List<Item> list = map.get(item);
if (list != null) {
output .addAll(list);
}
});
这里我使用的是 Lambda 表达式,现在有没有办法使用 Lamda 或方法引用进一步简化此代码?
我会流式传输过滤器列表,将其平面映射到列表中的值,然后将它们作为单行收集:
List<Item> result =
filter.stream()
.flatMap(f -> map.getOrDefault(f, Collections.emptyList).stream())
.collect(Collectors.toList());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.