首页 > 解决方案 > 从地图获取值时使用 Optional 验证 null

问题描述

我有这条线

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 的目的是不同的。但是,我不明白为什么。
真的是这样吗?为什么?

标签: java-8optional

解决方案


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

有关滥用Optional<T>类型的后果,请参阅此答案。

而不是您当前的解决方案,@JB Nizet 暗示的更好的解决方案将从 JDK8 开始使用Map::getOrDefault

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

推荐阅读