【发布时间】:2015-12-29 06:49:49
【问题描述】:
我发现自己想要一个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) 是不够的,因为我需要一个键映射函数和一个值映射函数。
【问题讨论】:
-
我很惊讶你没有在互联网上看到任何东西。在流行的搜索引擎中搜索“guava java 8 collector”会返回很多直接可用的代码,包括直接在 Guava 项目中的结果(作为问题)。
-
我们为此提供了
collectingAndThen()。 -
ImmutableMultimap上的问题的答案确实回答了我的直接问题。然而,那里的解决方案或我现在在网上找到的解决方案似乎都没有包含一套完美的功能来处理ImmutableMap——它们缺乏合并重复键的能力和/或不抛出IllegalStateException(遵循Collectors设定的约定) -
从 Guava 21 开始就内置了ImmutableMap.toImmutableMapcollector。
-
查看answer 了解如何使用 Guava 的 toImmutableMap() 收集器的示例。