我有两个Collectors.groupingBy
在流中。我需要收集所有信息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
that is
Collectors.groupingBy(Function<..> classifier, Supplier<M> mapFactory, Collector<..> downstream) https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html#groupingBy-java.util.function.Function-java.util.function.Supplier-java.util.stream.Collector- where:
-
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 https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html#groupingBy-java.util.function.Function-:
这会产生类似于以下内容的结果:groupingBy(classifier, toList());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)