【发布时间】:2012-12-21 14:13:15
【问题描述】:
这个问题已经在这里发布了: How to convert Map<String, String> to Map<Long, String> using guava
我觉得CollinD的回答比较合适:
Guava 的所有转换和过滤方法都会产生惰性 结果...函数/谓词仅在需要时应用 使用对象。他们不创建副本。不过,正因为如此,一个 转换很容易打破
Set的要求。假设,例如,您有一个
Map<String, String>,其中包含 “1”和“01”都作为键。它们都是不同的Strings,所以Map可以合法地包含两者作为键。如果您使用Long.valueOf(String),但是,它们都映射到值1。他们是 不再是不同的键。这不会破坏任何东西,如果你 创建地图的副本并添加条目,因为任何重复 键将覆盖该键的前一个条目。一个懒惰的 但是,转换后的Map将无法强制执行唯一键 因此会违反Map的合同。
这是真的,但实际上我不明白为什么没有这样做,因为:
当键转换发生时,如果 2 个键被“合并”,可能会引发运行时异常,或者我们可以传递一个标志来指示 Guava 为新计算的多个可能值中的任何一个值密钥(故障快速/故障安全可能性)
我们可以有一个 Maps.transformKeys 来生成一个 Multimap
做这些事情有没有我看不到的缺点?
【问题讨论】:
-
似乎更适合programmers.stackexchange.com