我正在使用Java 8 lambda,并且想要使用Collectors
toMap
返回一个SortedMap
。我能想到的最好的Collectors
toMap
方法是使用一个虚拟对象mergeFunction
并mapSupplier
等于来调用以下方法TreeMap::new
。
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);
}
我不想像我只想要的那样传入合并函数,就像下面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
用来返回a的最佳实践方法是SortedMap
什么?
k
不是key,而是用于合并的二进制操作的第一个值。