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

また、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
于 2013-06-20T18:20:58.733 に答える
0

を拡張しHashMapてオーバーライドしますget()

于 2013-06-20T18:18:12.357 に答える