【发布时间】:2018-10-18 21:21:50
【问题描述】:
我有一个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> output = filter.stream().map(map::get).filter(Objects::nonNull).flatMap(List::stream).collect(Collectors.toList()) -
shmosel,非常感谢,完美的答案。你能给我推荐一本很好的教程或书来解释如何使用这些功能吗?
-
我读过一本名为 Java 8 in Action 的书。但是网上有很多教程。
标签: java list lambda java-8 java-stream