最佳答案
我正在使用 Java8 lambdas 并希望使用 Collectors
toMap
返回一个 SortedMap
。我能想到的最好方法是使用等于 TreeMap::new
的虚拟 mergeFunction
和 mapSupplier
调用以下 Collectors
toMap
方法。
public static <T, K, U, M extends Map<K, U>>
Collector<T, ?, M> toMap(Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends U> valueMapper,
BinaryOperator<U> mergeFunction,
Supplier<M> mapSupplier) {
BiConsumer<M, T> accumulator = (map, element) -> map.merge(keyMapper.apply(element),
valueMapper.apply(element), mergeFunction);
return new CollectorImpl<>(mapSupplier, accumulator, mapMerger(mergeFunction), CH_ID);
}
但是我不想传入一个 merge 函数,因为我只想要 throwingMerger()
,与基本的 toMap
实现方式相同,如下所示:
public static <T, K, U>
Collector<T, ?, Map<K, U>> toMap(Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends U> valueMapper) {
return toMap(keyMapper, valueMapper, throwingMerger(), HashMap::new);
}
使用 Collectors
返回 SortedMap
的最佳实践方法是什么?