列表分组流映射
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
键进入相应的List
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
的键不会被排序。
我得到的示例代码是
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
键进入相应的List
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
的键不会被排序。