我有一个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或方法引用来进一步简化这段代码?
发布于 2018-10-19 15:15:05
我会流式传输过滤器列表,将其平面映射到列表上的值,然后将它们收集为oneliner:
List<Item> result =
filter.stream()
.flatMap(f -> map.getOrDefault(f, Collections.emptyList).stream())
.collect(Collectors.toList());
https://stackoverflow.com/questions/52882780
复制相似问题