Better Map Constructor

后端 未结 5 631
走了就别回头了
走了就别回头了 2021-01-02 10:13

Is there a more streamlined way to do the following?

Map map = new HashMap();
map.put(\"a\", \"apple\");
map.put(         


        
相关标签:
5条回答
  • 2021-01-02 10:27

    No, there isn't, but I wrote a method to do exactly this, inspired by Objective-C NSDictionary class:

    public static Map<String, Object> mapWithKeysAndObjects(Object... objects) {
    
        if (objects.length % 2 != 0) {
            throw new IllegalArgumentException(
                    "The array has to be of an even size - size is "
                            + objects.length);
        }
    
        Map<String, Object> values = new HashMap<String, Object>();
    
        for (int x = 0; x < objects.length; x+=2) {
          values.put((String) objects[x], objects[x + 1]);
        }
    
        return values;
    
    }
    
    0 讨论(0)
  • 2021-01-02 10:30

    You could use ImmutableMap.Builder from Google collections library.

    0 讨论(0)
  • 2021-01-02 10:36

    You could always use double brace initialization:

    Map<String, String> map = new HashMap<String, String>() {{
        put("foo", "bar");
        put("baz", "qux");
    }}
    

    But bear in mind this might not be efficient according to these answers.

    0 讨论(0)
  • 2021-01-02 10:38

    Java 9 adds Map.of, such as:

    Map<String, String> map = Map.of("a", "apple", "b", "bear", "c", "cat");
    

    Up to 10 entries are supported. For more entries you can use the overload taking Entry:

    Map<String, String> map 
        = Map.ofEntries
            (Map.entry("a", "apple")
            , Map.entry("b", "bear")
            , Map.entry("c", "cat"));
    

    Note that these methods do not return a HashMap. It returns an optimized immutable map.

    0 讨论(0)
  • 2021-01-02 10:44

    There's always double-brace initialization:

    Map<String, String> map = new HashMap<String, String>(){{
        put("a", "apple"); put("b", "bear"); put("c", "cat");}};
    

    There are problems with this approach. It returns an anonymous inner class extending HashMap, not a HashMap. If you need to serialize the map then know that serialization of inner classes is discouraged.

    0 讨论(0)
提交回复
热议问题