如何初始化Map <k,map <k,v =“”>&gt;在一条线上

时间:2018-05-07 19:54:21

标签: java dictionary

是否可以将这两行代码合并为一个?

    allPeople.put("Me", new HashMap<String, String>());
    allPeople.get("Me").put("Name", "Surname");

3 个答案:

答案 0 :(得分:3)

从Java 9开始,提供了一个JDK提供的Map factory

allPeople.put("Me", Map.of("Name", "Surname"));

答案 1 :(得分:3)

这两行的字面替换将是(在Java 8 +中):

allPeople.compute("Me", (k, v) -> new HashMap<>()).put("Name", "Surname");

或者,在Bax's answer的样式中,对于Java 9之前的版本,您可以使用:

allPeople.put("Me", new HashMap<>(Collections.singletonMap("Name", "Surname")));

答案 2 :(得分:2)

您应该将某人视为对象。这样您就无法在不存在的密钥上调用get("someKey"),并且代码会爆炸。这就是面向对象编程的想法。封装相关数据和功能。嵌套映射做了类似的事情,但它更容易出错。对于不支持对象的语言,这是有道理的。但是将一个人表示为一个对象可以让你更好地控制映射所具有的字段,从而使你的代码更加无错误。

class Person {
    private String name;
    private String surname;

    public Person(String name, String surname) {
        this.name    = name;
        this.surname = surname;
    }

}

然后,您创建一个将名称映射到人员的地图:

Map<String, Person> allPeople = new HashMap<>();

// Create an object that represents a person
Person me = new Person("name", "surname");

// Map the string "me" to the object me that represents me
allPeople.put("ME", me);