Это зависит от ваших более точных функциональных требований.Я представляю пару вариантов.
Если вы просто хотите список, который содержит друзей ресурса и Джона:
List<String> listWithJohn = Optional.ofNullable(resource.getFriends())
.orElseGet(ArrayList::new);
listWithJohn.add("John");
Как упомянул в комментарии Василий Бурк, начиная с Java 9,Вместо этого можно выполнить инициализацию списка, используя Objects.requireNonNullElseGet
:
List<String> listWithJohn
= Objects.requireNonNullElseGet(resource.getFriends(), ArrayList::new);
Если вместо этого вы хотите, чтобы Джон был добавлен в друзья ресурса, я предлагаю использовать метод getFriends
, где можно редактировать:
/** @return The list of friends, not null */
public List<String> getFriends() {
if (friends == null) {
friends = new ArrayList<>();
}
return friends;
}
Возвращение самого списка делает ресурсы уязвимыми для вызывающих абонентов, которые изменяют свои списки друзей нежелательно и непредсказуемо в любое более позднее время.Часто вместо этого требуется вернуть копию списка или его неизменяемое представление (не позволяя вызывающему абоненту добавить Джона в друзья).В этом случае ресурсы могут иметь метод addFriend
для добавления друзей.
РЕДАКТИРОВАТЬ:
есть способ сделать только в одной строке лямбда-кода?
friends = friends == null ? new ArrayList<>() : friends;
return friends;
Но я бы нашел его менее читабельным (и там нет лямбды, это всего лишь одна строка).Или, если вы хотите, чтобы это было полностью загадочно:
return friends = friends == null ? new ArrayList<>() : friends;
Не рекомендуется.