Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 优雅地编写初始化的静态哈希表_Java_Hashtable - Fatal编程技术网

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”} 哪个看起来更优雅 (我知道初始化需要在一个静态块中。

是否有一种方法可以在java中以键值对编写静态最终哈希表,就像您可以方便地初始化字符串数组一样,如下所示:

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");
}};