gpt4 book ai didi

Java 8 Collectors.toMap 排序 map

转载 作者:IT老高 更新时间:2023-10-28 13:53:15 30 4
gpt4 key购买 nike

我正在使用 Java 8 lambda,并希望使用 Collectors toMap 来返回 SortedMap。我能想到的最好的方法是调用以下 Collectors toMap 方法,其中虚拟 mergeFunctionmapSupplier 相等到 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 返回 SortedMap 的最佳实践方法是什么?

最佳答案

我认为没有比这更好的了:

.collect(Collectors.toMap(keyMapper, valueMapper,
(v1,v2) ->{ throw new RuntimeException(String.format("Duplicate key for values %s and %s", v1, v2));},
TreeMap::new));

其中 throw lambda 与 throwingMerger() 相同,但我不能直接调用它,因为它是包私有(private)的(当然,您可以始终使自己的静态像 throwingMerger() 这样的方法是。)

关于Java 8 Collectors.toMap 排序 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31004899/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com