繁体   English   中英

Java 8 根据条件从地图中获取列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM