Java-коллекции используют методы equals
и hashCode
(последний используется HashMap
s, HashSet
s и другими).
Если вы хотите использоватьВозможности структуры данных коллекций Java (например, removeAll
, retainAll
и т. д.), вам необходимо предоставить объектам правильные реализации equals
и hashCode
.
Если вы не можете изменитьItem
class, вы можете написать класс-оболочку с собственной реализацией equals
:
public class ItemWrapper {
private final Item item;
public ItemWrapper(Item item) {
this.item = item;
}
public Item getItem() {
return item;
}
@Override
public boolean equals(Object obj) {
return obj instanceof ItemWrapper && item.getId().equals(((ItemWrapper) obj).item.getId());
}
@Override
public int hashCode() {
return item.getId().hashCode();
}
}
Создать новый ItemWrapper
для каждого оригинального Item
, сохранить ItemWrapper
s в Javaколлекции и использовать необходимые методы (removeAll
/ retainAll
).Затем выполните итерацию по полученной коллекции и извлеките Item
s, вызвав каждый ItemWrapper
'getItem()
метод.
Другой вариант - создать подкласс ArrayList
, но это выглядит как более запутанное решение.
Еще один вариант - не использовать коллекции Java для логики удаления / сохранения, а реализовывать их самостоятельно.