0

我得到的示例代码是

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

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

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

4

1 回答 1

2

第二个参数是 a Supplier<M>,用于生成Map实例。

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

如果您运行单个参数变体:

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

它仍然会将每个组的元素收集到 aList中(这是默认行为),但是您无法控制MapString键映射到相应Lists 的类型。

在您的 3 参数示例中,您要求Map将是 a TreeMap,这意味着将对键进行排序。

单参数变体的当前实现:

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

相当于:

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

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

于 2022-01-03T12:14:46.737 回答