列表分组流映射

stream of list groupinngBy to map

我得到的示例代码是

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

输入是啤酒对象列表,它 return 是啤酒种类的地图,其中包含所有啤酒。

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

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

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

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

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

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

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

单参数变体的当前实现:

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

相当于:

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

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