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

时间:2018-10-18 21:21:50

标签: java list lambda java-8 java-stream

我有一个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或方法引用来进一步简化此代码?

1 个答案:

答案 0 :(得分:1)

我将流式处理过滤器列表,将其平面映射到列表中的值,然后将它们作为一个单行收集:

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