优雅地写一个初始化的静态哈希表[重复]

问题描述 投票:7回答:4

这个问题在这里已有答案:

有没有办法在密钥值对中用java编写静态最终Hashtable,就像你可以方便地初始化字符串数组一样:

String [] foo = {"A","AB"};

基本上我的意思是不必为键:值对写“put”,而是可能是这样的:

Hashtable<String, String> foo = {"JJ":"222","KK":"222"}

哪个IMO看起来更优雅。

(我知道初始化需要在一个静态块中。我现在暂时离开它)

java hashtable
4个回答
7
投票

不,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]);
    }
}

当然,这并没有真正为简单的复制和粘贴put解决方案添加任何内容,如果您的密钥和值类型不同,它也无法正常工作。


10
投票

匿名内部类将为您提供双括号初始化,这在某些情况下很有用:

static final Map<String, String> map = new HashMap<String, String>() {{
    put("foo", "bar");
    put("x", "y");
}};

无论如何,@ michael667的答案可能是最好的


8
投票

你可以使用番石榴的ImmutableMap

map = ImmutableMap.of(key1, value1, key2, value2);

这些便利方法存在一至五个元素。如果您需要更多,可以使用ImmutableMap.Builder

static final ImmutableMap<String, Integer> WORD_TO_INT =
   new ImmutableMap.Builder<String, Integer>()
     .put("one", 1)
     .put("two", 2)
     .put("three", 3)
     .build();

-1
投票

不,你正在寻找像C#的collection initializers这样的东西,它目前在Java中不存在。

您可以使用匿名类来保存一点打字,但您仍然需要编写put

© www.soinside.com 2019 - 2024. All rights reserved.