我有一个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或方法引用来进一步简化此代码?
答案 0 :(得分:1)
我将流式处理过滤器列表,将其平面映射到列表中的值,然后将它们作为一个单行收集:
List<Item> result =
filter.stream()
.flatMap(f -> map.getOrDefault(f, Collections.emptyList).stream())
.collect(Collectors.toList());