我有这行
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的目的是不同的。但是,我不明白为什么。
真的是这样吗?为什么?
答案 0 :(得分:3)
有些人对此有不同的看法,但是好的做法是始终按预期方式使用某些东西。
see this回答滥用Optional<T>
类型的后果。
@JB Nizet暗示了一个更好的解决方案,而不是当前的解决方案,而是使用Map::getOrDefault
,该功能自JDK8起可用。
List<Integer> result = map.getOrDefault(key, Collections.emptyList());