当前位置: 首页 > 面试题库 >

Java 8 Collectors.toMap SortedMap

韩羽
2023-03-14
问题内容

我正在使用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用来返回a 的最佳实践方法是SortedMap什么?


问题答案:

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

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

其中throwlambda
throwingMerger()与之相同,但我不能直接调用它,因为它是私有包(您当然可以总是像这样按自己的方式创建静态方法throwingMerger()。)



 类似资料:

相关阅读

相关文章

相关问答