Java 优雅地编写初始化的静态哈希表
是否有一种方法可以在java中以键值对编写静态最终哈希表,就像您可以方便地初始化字符串数组一样,如下所示:Java 优雅地编写初始化的静态哈希表,java,hashtable,Java,Hashtable,是否有一种方法可以在java中以键值对编写静态最终哈希表,就像您可以方便地初始化字符串数组一样,如下所示: String [] foo = {"A","AB"}; 基本上,我的意思是不必为key:value对写“put”,而是可能是这样的: Hashtable<String, String> foo = {"JJ":"222","KK":"222"} Hashtable foo={“JJ”:“222”,“KK”:“222”} 哪个看起来更优雅 (我知道初始化需要在一个静态块中。
String [] foo = {"A","AB"};
基本上,我的意思是不必为key:value对写“put”,而是可能是这样的:
Hashtable<String, String> foo = {"JJ":"222","KK":"222"}
Hashtable foo={“JJ”:“222”,“KK”:“222”}
哪个看起来更优雅
(我知道初始化需要在一个静态块中。我暂时不考虑这个问题)不,您正在寻找类似C#的东西,Java中目前不存在这种东西 您可以使用匿名类来节省一些输入,但您仍然需要编写
put
您可以使用guava的:
这些方便的方法适用于一到五种元素。如果您需要更多,您可以使用:
静态最终不可变映射单词到INT=
新的ImmutableMap.Builder()
.put(“一”,1)
.put(“两个”,2)
.put(“三”,3)
.build();
不,Java没有映射文本,但它有数组文本
static final Map<String, String> map;
static {
map = new HashMap<String, String>();
String[][] pairs = {
{"foo", "bar"},
{"x", "y"}
};
for (String[] pair : pairs) {
map.put(pair[0], pair[1]);
}
}
静态最终地图;
静止的{
map=新的HashMap();
字符串[][]对={
{“foo”,“bar”},
{“x”,“y”}
};
for(字符串[]对:对){
map.put(对[0],对[1]);
}
}
当然,这并不能真正为简单的复制和粘贴
put
解决方案添加任何内容,而且如果您的键和值类型不同,它也不能很好地工作。匿名内部类将为您提供双括号初始化,这在某些情况下很有用:
static final Map<String, String> map = new HashMap<String, String>() {{
put("foo", "bar");
put("x", "y");
}};
static final Map=new HashMap(){{
put(“foo”、“bar”);
放置(“x”、“y”);
}};
无论如何,@michael667的答案可能是最好的首选解决方案:将初始代码移到静态变量的正下方。无论您如何使用源代码自动格式化(对成员排序)。仅使用纯标准Javalibs。
static final Map<String, String> map;
static {
map = new HashMap<String, String>();
String[][] pairs = {
{"foo", "bar"},
{"x", "y"}
};
for (String[] pair : pairs) {
map.put(pair[0], pair[1]);
}
}
static final Map<String, String> map = new HashMap<String, String>() {{
put("foo", "bar");
put("x", "y");
}};