【问题标题】:How to add pre-defined values to Pair Hashmap in Java如何在 Java 中将预定义值添加到 Pair Hashmap
【发布时间】:2019-01-16 21:59:22
【问题描述】:

我知道如何向 hashmap 添加值,但是如果 hashmap 包含 Pair 元组怎么办。

我尝试了以下

private HashMap<String, Pair<String,String>> s = new HashMap<String, Pair<String, String>>() {{put("New York",("US Dollar", "NYC"));
    }};

它提供了一个错误说明:

行上有多个标记

  • 标记“,”的语法错误,无效的赋值运算符
  • 赋值的左侧必须是变量

【问题讨论】:

  • 不要使用那种“双括号”样式;它有各种各样的问题。

标签: java hashmap tuples


【解决方案1】:

没有用于在 Java 中创建 Pair 构造的 Java 语法支持,例如映射文字。如果您将"US Dollar", "NYC" 放在括号中,那么编译器将假定存在某种表达式。它找到逗号并抱怨没有赋值运算符。实际上,其他运算符是可能的,例如+,但这是编译器给出的信息。解析器只是在解析树中寻找“赋值表达式”的可能性,试图弄明白原来是语法错误。

假设您已经创建了自己的 Pair 类并且已经在范围内,只需使用 new 显式创建 Pair。 (您可以使用从 Java 7 开始提供的菱形运算符来缩短您的代码。)

private HashMap<String, Pair<String, String>> s = new HashMap<>() {{
    put("New York", new Pair<>("US Dollar", "NYC"));
}};

使用这种“双括号”初始化可能会起作用,但这只是因为它

  1. 使用大括号创建Hashmap 的匿名子类。
  2. 使用内大括号创建实例初始化程序,用于初始化地图。

从 Java 9 开始,您可以使用 Map.of 指定具有特定值的 Map,而无需额外匿名类的开销。

private Map<String, Pair<String,String>> s = Map.of("New York", new Pair<>("US Dollar", "NYC"));

您可能还想考虑创建自己的有意义的类来代替通用的Pair 类。

【讨论】:

  • 谢谢@rgettman。这行得通。还有一个问题,如果我需要添加多个值,我做 put("New York", new Pair("US Dollar", "NYC")); put("New York1", new Pair("US Dollar", "NYC")); put("New York2", new Pair("US Dollar", "NYC"));
  • 您可以拨打所有您想要的put 电话;它们只是方法调用。如果您使用Map.of,您最多可以提供 10 个键/值对,例如Map.of("New York", new Pair&lt;&gt;("US Dollar", "NYC"), "London", new Pair&lt;&gt;("UK Pound", "LON"), "Tokyo", new Pair&lt;&gt;("Japanese Yen", "TOK"));.
【解决方案2】:

从 Java 9 开始你可以使用Map.of:

Map<String, Pair<String,String> values = Map.of("New York", new Pair<>("US Dollar", "NYC"));

我不知道 Pair 是什么,因为默认 JDK 中没有 Pair 类,但我假设它有一个接受两个值的构造函数。

您的方法创建了一个匿名类,该类还具有对封闭对象的引用,因此这不是一个好的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多