【问题标题】:Setting Default Values in HashMap [duplicate]在 HashMap 中设置默认值
【发布时间】:2013-06-17 17:37:46
【问题描述】:

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

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

【问题讨论】:

  • 覆盖Map。请注意,这将违反合同。

标签: java spring spring-mvc


【解决方案1】:

尝试以下方法:

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"));

【讨论】:

    【解决方案2】:

    最好检查返回值,而不是更改 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

    【讨论】:

      【解决方案3】:

      与其尝试给数据赋值,不如在要拉取数据的时候做个检查?

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

      【讨论】:

        【解决方案4】:

        不,您不能将其用作切换条件。 您可以通过将 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
        

        【讨论】:

          【解决方案5】:

          扩展HashMap 并覆盖get()

          【讨论】:

            猜你喜欢
            • 2014-12-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-12-23
            • 2019-04-26
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多