我有一个 Map<String, String>
String
键不过是数值,例如“123”等。我得到数值是因为这些值来 self 的 JSF 组件中的 UI。我不想更改 UI 组件的契约(Contract)。
现在我想创建一个 Map<Long, String>
基于以上Map
, 我看到了一些 transform
Maps
中的方法类,但所有人都专注于转换值(value)而不是关键。
有没有更好的转换方法Map<String, String>
至Map<Long, String>
?
最佳答案
@Vivin 的回答是正确的,但我认为解释为什么 Guava 没有任何方法可以让您转换 Map
的键是有用的。 (或完全转换 Set
)。
Guava 的所有转换和过滤方法都会产生惰性结果...函数/谓词仅在使用对象时需要时应用。他们不创建副本。但是,正因为如此,转换很容易打破 Set
的要求。 .
假设,例如,您有一个 Map<String, String>
包含“1”和“01”作为键。它们都是不同的String
s,所以 Map
可以合法地包含两者作为键。如果您使用 Long.valueOf(String)
转换它们, 但是,它们都映射到值 1
.它们不再是不同的键。如果您创建 map 副本并添加条目,这不会破坏任何内容,因为任何重复的键都会覆盖该键的先前条目。一个懒惰的变换Map
但是,将无法强制执行唯一 key ,因此会违反 Map
的契约(Contract)。 .
关于java - 如何将 Map<String, String> 转换为 Map<Long, String> ? (选项 : using guava),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5733142/