Java8根据条件从映射中获取列表

Java8根据条件从映射中获取列表,java,list,lambda,java-8,java-stream,Java,List,Lambda,Java 8,Java Stream,我有一个项目课程: public class Item { String name; double price; // Getters & Setters } 现在我有了一张地图,map-map此映射包含项目的名称和具有相同名称的项目的对应列表 现在我想找出所有符合筛选条件的项目列表 这是我的过滤器列表过滤器基本上它包含我需要从地图中过滤的所有名称列表,并将所有选定的项目作为最终列表 List<Item> output = new ArrayList

我有一个
项目
课程:

public class Item {
    String name;
    double price;
    // Getters & Setters
}
现在我有了一张地图,
map-map此映射包含项目的名称和具有相同名称的项目的对应列表

现在我想找出所有符合筛选条件的项目列表

这是我的过滤器
列表过滤器
基本上它包含我需要从地图中过滤的所有名称列表,并将所有选定的项目作为最终列表

List<Item> output = new ArrayList<>();
        filter.forEach(item -> {
            List<Item> list = map.get(item);
            if (list != null) {
                output .addAll(list);
            }
        });
List output=new ArrayList();
过滤器.forEach(项目->{
列表=map.get(项目);
如果(列表!=null){
output.addAll(列表);
}
});

这里我使用的是Lambda表达式,现在有没有一种方法可以使用Lamda或方法引用进一步简化此代码?

我将对过滤器列表进行流式处理,将其平面映射到列表上的值,然后将其收集为一行:

List<Item> result = 
    filter.stream()
          .flatMap(f -> map.getOrDefault(f, Collections.emptyList).stream())
          .collect(Collectors.toList());
列表结果=
filter.stream()
.flatMap(f->map.getOrDefault(f,Collections.emptyList).stream())
.collect(Collectors.toList());

List output=filter.stream().map(map::get).filter(Objects::nonNull).flatMap(List::stream).collect(Collectors.toList())
shmosel,非常感谢,完美的答案。你能给我推荐一本好的教程或书来解释如何使用这些特性吗?我读了一本叫《Java8在行动》的书。但是网上有很多教程。