如何在Java中将预定义值添加到Pair Hashmap

时间:2019-01-16 21:59:22

标签: java hashmap tuples

我知道如何向哈希表添加值,但是如果哈希表包含对元组,该怎么办?

我尝试了以下

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

它提供了一个错误说明:

  

该行上有多个标记

     
      
  • 令牌“,”的语法错误,无效的赋值运算符
  •   
  • 作业的左侧必须是变量
  •   

2 个答案:

答案 0 :(得分:1)

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

假设您已经创建了自己的Pair类,并且已经在范围内,只需使用Pair显式创建new。 (您可以使用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类。

答案 1 :(得分:0)

从Java 9开始,您可以使用Map.of

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

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

您的方法将创建一个匿名类,该类也具有对封闭对象的引用,所以这不是一个好的解决方案。