4

我正在尝试找到一种使 HashMap 返回默认值的方法。例如,如果您查看以下内容,这将打印输出“ Test:=null ”如果我想请求一个默认值,那么无论何时我尝试获取未在 hashMap 中设置的内容,我都会得到该值?

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

5 回答 5

8

尝试以下操作:

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"));
于 2013-06-20T18:17:03.603 回答
4

最好检查返回值,而不是改变MapIMO 的工作方式。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 在这里

于 2013-06-20T18:21:45.017 回答
2

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

if (!set.containsKey(key)){
    return default_value;
}
else{
    return set.get(key);
}
于 2013-06-20T18:18:29.480 回答
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"));

你也可以通过简单地使用Propertiesclass 而不是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
于 2013-06-20T18:20:58.733 回答
0

扩展HashMap并覆盖get().

于 2013-06-20T18:18:12.357 回答