gpt4 book ai didi

java-8 - Java - 是否有任何返回 ImmutableMap 的流收集器?

转载 作者:行者123 更新时间:2023-12-04 00:41:30 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Java 8 collector for Guava immutable collections?

(5 个回答)


6年前关闭。




我发现自己想要 Collectors.toMap 的变体返回 ImmutableMap ,这样我就可以做到:

ImmutableMap result = list.stream().collect(MyCollectors.toImmutableMap(
tuple -> tuple._1(), tuple -> tuple._2());

(其中 tuple 在此特定示例中是 Scala Tuple2 )

我有 just learned这种方法将在 Guava 21 中支持 Java-8(耶!),但这听起来还需要 6 个月的时间。有谁知道今天可能实现这一点的任何现有库(等)?
ImmutableMap不是严格要求,但似乎是我要求的最佳选择:按键查找,并保留原始迭代顺序。不变性也总是首选。

请注意 FluentIterable.toMap(Function)是不够的,因为我需要一个键映射函数和一个值映射函数。

最佳答案

您不需要为此收集器编写匿名类。您可以使用 Collector.of反而:

public static <T, K, V> Collector<T, ?, ImmutableMap<K,V>> toImmutableMap(
Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends V> valueMapper) {
return Collector.of(
ImmutableMap.Builder<K, V>::new,
(b, e) -> b.put(keyMapper.apply(e), valueMapper.apply(e)),
(b1, b2) -> b1.putAll(b2.build()),
ImmutableMap.Builder::build);
}

或者如果您不介意先将结果收集到可变映射中,然后将数据复制到不可变映射中,则可以使用内置的 toMap收集器结合 collectingAndThen :
ImmutableMap<String, String> result = 
list.stream()
.collect(collectingAndThen(
toMap(
tuple -> tuple._1(),
tuple -> tuple._2()),
ImmutableMap::copyOf));

关于java-8 - Java - 是否有任何返回 ImmutableMap 的流收集器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34505941/

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