在HashMap中设置默认值

时间:2013-06-20 18:14:41

标签: java spring spring-mvc

我试图找到一种方法让HashMap返回一个默认值。例如,如果你看下面这将打印输出“测试:= null ”如果我想要请求一个默认值,所以当我试图得到一些未在hashMap中设置的东西时我会得到价值?

Map<String, String> test = new HashMap<String, String>();
test.put("today","monday");
System.out.println("Test =:" + test.get("hello") + "");

5 个答案:

答案 0 :(得分:7)

尝试以下方法:

Map<String,String> map = new HashMap<String,String>(){
    @Override
    public String get(Object key) {
        if(! containsKey(key))
            return "DEFAULT";
        return super.get(key);
    }
};

System.out.println(map.get("someKey"));

答案 1 :(得分:4)

更好地检查返回值,而不是改变Map IMO的工作方式。 Commons Lang StringUtils.defaultString(String)方法可以解决问题:

Map<String, String> test = new HashMap<>();
assertEquals("", StringUtils.defaultString(test.get("hello")));
assertEquals("DEFAULT", StringUtils.defaultString(test.get("hello"), "DEFAULT"));

StringUtils JavaDoc是here

答案 2 :(得分:2)

与其尝试为数据赋值,为什么不在需要提取数据时进行检查?

if (!set.containsKey(key)){
    return default_value;
}
else{
    return set.get(key);
}

答案 3 :(得分:2)

不,您不能将其用作切换条件。 您可以通过将get方法扩展到另一个类来覆盖它,或者您可以按如下方式尝试:

Map<String, String> test = new HashMap<String, String>();
test.put("today", "monday");
String s = test.get("hello") == null? "default value" : test.get("hello");
System.out.println("Test =:" + s);

    final String defaultValue = "default value";
    Map<String, String> test = new HashMap<String, String>() {

        @Override
        public String get(Object key) {
            String value = super.get(key);
            if (value == null) {
                return defaultValue;
            }
            return value;
        };
    };
    test.put("today", "monday");            
    System.out.println("Test =:" + test.get("nokey"));

您也可以通过简单地使用Properties类而不是HashMap来实现此目的。

        Properties properties = new Properties();
        properties.setProperty("key1", "value of key1");
        String property1 = properties.getProperty("key1", "default value");
        String property2 = properties.getProperty("key2", "default value");
        System.out.println(property1);
        System.out.println(property2);

打印:

value of key1
default value

答案 4 :(得分:0)

扩展HashMap并覆盖get()