相关疑难解决方法(0)

如何将Map <String,String>转换为Map <Long,String>?(选项:使用番石榴)

我有一个Map<String, String>String关键无非是像"123"等我得到的数值,因为这个数值是从UI在我的JSF组件来数值.我不想更改UI组件的合同.

现在我想创建一个Map<Long, String>基于上面的内容Map,我transformMaps类中看到了一些方法但是所有方法都专注于转换值而不是键.

有没有更好的转换Map<String, String>方式Map<Long, String>

java guava

19
推荐指数
3
解决办法
3万
查看次数

为什么Guava不提供转换地图键的方法

这个问题有点已经发布在这里: 如何使用guava将Map <String,String>转换为Map <Long,String>

我认为CollinD的答案是恰当的:

所有Guava用于转换和过滤的方法都会产生惰性结果......函数/谓词仅在需要时应用,因为使用了对象.他们不创建副本.因此,转换很容易打破a的要求Set.

比方说,例如,你有一个Map<String, String>包含"1"和"01"的键作为键.它们都是不同String的,因此 Map可以合法地包含两个键.Long.valueOf(String)但是,如果使用它们进行变换 ,它们都会映射到该值1.它们不再是不同的关键.如果您创建地图副本并添加条目,则不会破坏任何内容,因为任何重复的密钥都将覆盖该密钥的上一个条目.Map然而,一个懒惰的转变,将无法强制执行唯一的密钥,因此将违反合同Map.

这是事实,但实际上我不明白为什么没有这样做,因为:

  • 当密钥转换发生时,如果2个密钥被"合并",则可以引发运行时异常,或者我们可以传递一个标志以指示Guava为新计算的密钥获取多个可能值的任何值(failfast/failafe可能性) )

  • 我们可以有一个Maps.transformKeys来生成Multimap

在做这些事情时我有没有看到的缺点?

java guava

10
推荐指数
1
解决办法
7035
查看次数

标签 统计

guava ×2

java ×2