Java-mooc.fi-练习46:Film引用-返回映射的方法不能返回null

Java-mooc.fi-练习46:Film引用-返回映射的方法不能返回null,java,null,return,Java,Null,Return,我有一个方法: public Map<Film, Rating> getPersonalRatings(Person person){ return this.personalRatings.get(person); } 公共地图getPersonalRatings(个人){ 返回此.personalRatings.get(个人); } 所以,基本概念是有一个 HashMap personalRatings <Person, Map<Film, Rating

我有一个方法:

public Map<Film, Rating> getPersonalRatings(Person person){

    return this.personalRatings.get(person);
}
公共地图getPersonalRatings(个人){
返回此.personalRatings.get(个人);
}
所以,基本概念是有一个

HashMap personalRatings <Person, Map<Film, Rating>>
HashMap个性化分级
这包括另一个作为映射值的电影分级哈希映射


我的方法需要返回一张分级电影的地图,它也是这样做的。问题是,如果一个人从未给一部电影评级,而电影评级的HashMap为空,那么它应该返回什么呢。无法返回null。

在需要集合的地方返回null不是一个好做法。通常,这应该是一个空集合。在本例中,使用Java8,您可以使用

this.personalRatings.getOrDefault(person, Collections.emptyMap());

为了避免null,您可以使用
computeIfAbsent()
方法。

例如:

Map<Film, Rating> ratingByFilmForThisPerson = 
                 personalRatings.computeIfAbsent(person, k -> new HashMap<Film, Rating>());
Map ratingbyfilmforthePerson=
computeIfAbsent(person,k->newhashmap());
如果存在映射,则返回人员的实际映射。
否则,它将为此人创建并关联一个空地图。

在任何情况下,它都会返回值:

空映射如何?