如何在流中收集到TreeMap?
How to collect into TreeMap in stream?
我在 Stream 中有两个 Collectors.groupingBy
。我需要收集所有信息到 TreeMap
.
我的代码:
Map<LocalDate, Map<String, List<RollingField>>> fieldMap = rollingFields.stream().collect(
Collectors.groupingBy(
RollingField::getDate,
Collectors.groupingBy(fi -> fi.getMeta().getName())));
还有这个returnHashMap
。我需要为 returning TreeMap
添加什么?我需要这个按 LocalDate
.
排序
使用允许通过Supplier
提供Map
工厂的特定方法即
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)
)
));
不用担心没有downstream
就没有Collectors.groupingBy(Function<..> classifier, Supplier<M> mapFactory)
这样的重载方法。 downstream
的默认实现是收集到 List,因此可以自由重用它 (Collectors.toList()
),来自 JavaDoc:
This produces a result similar to: groupingBy(classifier, toList());
我在 Stream 中有两个 Collectors.groupingBy
。我需要收集所有信息到 TreeMap
.
我的代码:
Map<LocalDate, Map<String, List<RollingField>>> fieldMap = rollingFields.stream().collect(
Collectors.groupingBy(
RollingField::getDate,
Collectors.groupingBy(fi -> fi.getMeta().getName())));
还有这个returnHashMap
。我需要为 returning TreeMap
添加什么?我需要这个按 LocalDate
.
使用允许通过Supplier
提供Map
工厂的特定方法即
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)
)
));
不用担心没有downstream
就没有Collectors.groupingBy(Function<..> classifier, Supplier<M> mapFactory)
这样的重载方法。 downstream
的默认实现是收集到 List,因此可以自由重用它 (Collectors.toList()
),来自 JavaDoc:
This produces a result similar to:
groupingBy(classifier, toList());