【问题标题】:stream of list groupinngBy to map要映射的列表 groupingBy 流
【发布时间】:2022-01-03 12:03:29
【问题描述】:

我得到的示例代码是

public Map<String, List<Bier>> opzettenOverzichtBierenPerSoort() {
   //TODO
    
    return bieren.stream().collect(Collectors.groupingBy(Bier::getSoort, TreeMap::new, Collectors.toList()));
}

输入是啤酒对象列表,它返回包含所有啤酒的啤酒类型的地图。

现在我的问题。什么是 groupingBy 中的第二个和第三个参数?我得到第一个说明它的分组依据...但第二个和第三个似乎有点随机。

【问题讨论】:

  • 您是否阅读过 oracle 网站上的文档?他们有解释它们的 javadocs。

标签: java treemap groupingby


【解决方案1】:

第二个参数是Supplier&lt;M&gt;,用于生成Map 实例。

第三个参数是下游Collector,它指定如何处理属于单个组的Bier元素。

如果您运行单参数变体:

return bieren.stream().collect(Collectors.groupingBy(Bier::getSoort));

它仍会将每个组的元素收集到 List 中(这是默认行为),但您无法控制将 String 键映射到相应 @ 的 Map 的类型987654329@s.

在您的 3 参数示例中,您请求 Map 将是 TreeMap,这意味着键将被排序。

单参数变体的当前实现:

return bieren.stream().collect(Collectors.groupingBy(Bier::getSoort));

相当于:

return bieren.stream().collect(Collectors.groupingBy(Bier::getSoort, HashMap::new, Collectors.toList()));

这意味着Map的键不会被排序。

【讨论】:

    猜你喜欢
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    相关资源
    最近更新 更多