我有两个Collectors.groupingBy
在Stream中。而且我需要收集所有信息TreeMap
。
我的代码:
Map<LocalDate, Map<String, List<RollingField>>> fieldMap = rollingFields.stream().collect(
Collectors.groupingBy(
RollingField::getDate,
Collectors.groupingBy(fi -> fi.getMeta().getName())));
而这个回报HashMap
。我需要添加什么才能退货TreeMap
?我需要用进行排序LocalDate
。
使用特定的方法,它允许提供一个Map
工厂通过Supplier
是
Collectors.groupingBy(Function<..> classifier, Supplier<M> mapFactory, Collector<..> downstream)
其中:
classifier
将元素映射到键中mapFactory
产生一个新的空地图(在这里使用() -> new TreeMap<>()
)downstream
下游减少实现方式:
Map<LocalDate, Map<String, List<RollingField>>> fieldMap = rollingFields.stream().collect(
Collectors.groupingBy(
RollingField::getDate, // outer Map keys
TreeMap::new, // outer Map is TreeMap
Collectors.groupingBy( // outer Map values
fi -> fi.getMeta().getName(), // inner Map keys
TreeMap::new, // inner Map is TreeMap
Collectors.toList() // inner Map values (default)
)
));
别担心,有没有像这样的重载方法Collectors.groupingBy(Function<..> classifier, Supplier<M> mapFactory)
没有downstream
。的默认实现downstream
是Collectors.toList()
从JavaDoc收集到List,因此可以自由地重用List():
产生的结果类似于:
groupingBy(classifier, toList());
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句