【问题标题】:How to use Collectors.grouping in Java 8 Stream API to create a Map如何在 Java 8 Stream API 中使用 Collectors.grouping 创建地图
【发布时间】:2014-03-26 18:25:26
【问题描述】:

我第一次寻找 Java 8 的 Stream API。我尝试创建一个过滤器来从地图中删除元素。

这是我的地图:

Map<String, Integer> m = new HashMap<>();

我想删除值 )。

这是我一直在尝试的:

m.entrySet().stream().filter( p -> p.getValue() > 0).collect(Collectors.groupingBy(s -> s.getKey()));    

我得到一个 HashMap>。所以,不是我想要的。

我也试过了:

m.entrySet().stream().filter( p -> p.getValue() > 0).collect(Collectors.groupingBy(Map::Entry::getKey, Map::Entry::getValue));

这会导致:

// Error:(50, 132) java: method reference not expected here

基本上我不知道如何构建新地图的值。

这是javadoc of Collectors,他们写了几个groupingBy 的例子,但我无法让它工作。

那么,我应该如何编写 collect 来构建我想要的地图?

【问题讨论】:

    标签: java java-stream


    【解决方案1】:

    您不需要再次对流项目进行分组,它们已经“映射” - 您只需要收集它们:

    m.entrySet().stream()
        .filter(p -> p.getValue() > 0)
        .collect(toMap(Entry::getKey, Entry::getValue));
    

    进口:

    import java.util.Map.Entry;
    import static java.util.stream.Collectors.toMap;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多