我知道如何向哈希表添加值,但是如果哈希表包含对元组,该怎么办?
我尝试了以下
private HashMap<String, Pair<String,String>> s = new HashMap<String, Pair<String, String>>() {{put("New York",("US Dollar", "NYC"));
}};
它提供了一个错误说明:
该行上有多个标记
- 令牌“,”的语法错误,无效的赋值运算符
- 作业的左侧必须是变量
答案 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"));
}};
使用这种“双括号”初始化可能有效,但这仅是因为它
Hashmap
的匿名子类。从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
类,但是我假设它具有一个接受两个值的构造函数。
您的方法将创建一个匿名类,该类也具有对封闭对象的引用,所以这不是一个好的解决方案。