【问题标题】:java set Map contents in constructor [duplicate]java在构造函数中设置地图内容[重复]
【发布时间】:2014-01-18 17:43:18
【问题描述】:

java中有没有办法在调用Map的构造函数时指定Map中的元素?

作为我的意思的一个例子,假设我想要以下键/值对的映射:

foo: bar
baz: bat

我可以像这样将它们添加到现有地图中:

Map<String, String> myMap = new HashMap<String, String>();
myMap.put("foo", "bar");
myMap.put("baz", "bat");

有没有办法做这样的事情(用从javascript借来的对象文字来代替我想要的东西):

Map<String, String> myMap = new HashMap<String, String>({"foo": "bar", "baz": "bat"});

我问的原因(以防它有所不同)是我想将一堆 HashMap 内联传递给函数调用,如果我不必创建变量来握住它们并为每个元素添加元素,一次一个。我正在考虑使用 JSON 解析器并将我的地图编写为 javascript 对象以节省时间,但如果这真的是执行此操作的最佳方式,那就有点傻了。

【问题讨论】:

  • 谢谢,不,这回答了这个问题。结束。

标签: java map constructor


【解决方案1】:

或者,它仍然可以通过可能扩展 HashMap 的自定义类来实现。

创建一个具有适当验证的类(我考虑了偶数个条目来形成一个键、值集):

public class MyMap extends HashMap<String, String> {

    public MyMap(String[] args) throws Exception {

        if ((args.length % 2) != 0) {
            throw new Exception("Key value pairs are not of required length");
        }

        for (int i = 1; i < args.length; i += 2) {
            this.put(args[i - 1], args[i]);

        }
    }
}

它遍历传递给构造函数的String数组并放入它的值。

在主调用类中,我们简单地用一个字符串数组调用构造函数:

public static void main(String... args) {
        try {
            MyMap myMap = new MyMap(
                    new String[] { "foo", "bar", "bat", "booze" });
            System.out.println(myMap.get("bat"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

输出:

【讨论】:

    【解决方案2】:

    您可以使用静态块来填充地图

    private Map<String, String> map;
    
    static {
        map.put("key0", "value0");
        map.put("key1", "value1");
    }
    

    【讨论】:

      猜你喜欢
      • 2017-05-04
      • 1970-01-01
      • 2011-03-22
      • 2017-01-03
      • 1970-01-01
      • 2014-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多