использование опционально для проверки нулевого значения при получении значения с карты - PullRequest
0 голосов
/ 25 октября 2018

У меня есть эта строка

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())

Но мне сказали, что цельНеобязательно другое.Однако я не понимаю, почему.Это действительно так?почему?

1 Ответ

0 голосов
/ 04 декабря 2018

Некоторые люди будут иметь разные взгляды на это, но хорошей практикой является всегда использовать что-то, как это было задумано.

см. Этот ответ о последствиях неправильного использования типа Optional<T>.

вместо вашего текущего решения, лучшее решение, подсказанное @JB Nizet, будет использовать Map::getOrDefault, доступный с JDK8.

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