Я пытаюсь получить новый ArrayList
из существующих ArrayList
и обновить поле в новом списке. Но он также обновляется в старом списке.ImmutableList, получающий обновление при обновлении списка ссылок
Я попытался следующий код:
absoluteEntitlements = findAbsoluteEntitlements(ImmutableList.copyOf(tenantEntitlements), everyoneEntitlements, "global");
private List<Entitlement> findAbsoluteEntitlements(ImmutableList<Entitlement> primaryEntitlements,
List<Entitlement> secondaryEntitlements, String accessType) {
List<Entitlement> absoluteEntitlements = new ArrayList<Entitlement>(primaryEntitlements);
for (int i = 0; i < primaryEntitlements.size(); i++) {
for (int j = 0; j < secondaryEntitlements.size(); j++) {
if (secondaryEntitlements.get(j).equals(primaryEntitlements.get(i))
&& "false".equals(primaryEntitlements.get(i).getAccessType())) {
absoluteEntitlements.get(i).setAccessType(accessType);
}
}
}
return absoluteEntitlements;
}
Просьба представить решение, где я делаю неправильно.
* «Я делаю неправильно» * Вы думаете, что все в неизменном списке тоже неизменны, но это не так. «ImmutableList» просто предотвращает манипулирование самим списком (например, добавлением или удалением элементов). Он не может защитить от изменения состояния содержащихся экземпляров. Либо сделайте свой «Права доступа» неизменяемыми (и верните новый экземпляр, если необходимо обновить поле), либо создайте метод для выполнения глубокой копии вашего списка «tenantEntitlements» (значит, он также копирует элементы «Права» в этом списке) , – Tom