java - 如何将 Map<String, String> 转换为 Map<Long, String> ? (选项 : using guava)

标签 java guava

我有一个 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/

相关文章:

android - 程序类型已经存在 : com. google.common.util.concurrent.internal.InternalFutureFailureAccess

java - 事件总线 Guava 有一个无界队列

java - 将文本字段值发送到不带表单标记的服务器

java - 更改 facelets url 缓存行为以包含主机

java - 具有多个 Java 应用程序的 Hibernate 数据库完整性

java - 通过 Java 获取 EC2 实例的 instance-id

java - 删除 HttpClient "http-outgoing"日志行

java - Google 馆藏供应商和查找

java - 使用 Guava 装饰 Map,使其表现得像 Set

java - Sets.newConcurrentHashSet() 的替代品是什么?