从地图获取值时使用Optional来验证null

时间:2018-10-25 20:33:44

标签: java-8 optional

我有这行

List<Integer> someListWithLongName = someMapWithLongName.containsKey(someObjectWithLongName.get()) 
    ? someMapWithLongName.get(someObjectWithLongName.get()) 
    : Collections.emptyList();

我想进行更改以使其更具可读性,所以我选择:

List<Integer> someListWithLongName = Optional.of(someMapWithLongName.get(someObjectWithLongName.get())
    .orElse(Collections.emptyList())

但是有人告诉我Optional的目的是不同的。但是,我不明白为什么。
真的是这样吗?为什么?

1 个答案:

答案 0 :(得分:3)

有些人对此有不同的看法,但是好的做法是始终按预期方式使用某些东西。

see this回答滥用Optional<T>类型的后果。

@JB Nizet暗示了一个更好的解决方案,而不是当前的解决方案,而是使用Map::getOrDefault,该功能自JDK8起可用。

List<Integer> result = map.getOrDefault(key, Collections.emptyList());