我试图找到一种方法让HashMap返回一个默认值。例如,如果你看下面这将打印输出“测试:= null ”如果我想要请求一个默认值,所以当我试图得到一些未在hashMap中设置的东西时我会得到价值?
Map<String, String> test = new HashMap<String, String>();
test.put("today","monday");
System.out.println("Test =:" + test.get("hello") + "");
答案 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()
。