Я не знаю сложности ваших объектов, но вы можете попробовать изменить List<>
int на Set<>
. В общем, Set
- это коллекция, которая не содержит повторяющихся элементов (например, на основе их хэш-кода).
1) Сравниваемые объекты
Прежде всего вам нужно переопределить equals()
и hashCode()
в классе DiscoverItems
для работы с коллекциями на основе ha sh (например, HashSet
).
Вы можете сгенерировать эти методы в Android Studio и выбрать основу на основе каких полей вы можете сказать, что «эти два объекта одинаковы». Иногда нет необходимости сравнивать все поля (вы можете использовать, например, только имя или какой-либо идентификатор).
В вашем случае, вам нужно сравнить это поле, которое вы передаете конструктору класса DiscoverItems
. Это может выглядеть так:
@Override
public boolean equals(Object object) {
if (this == object) return true;
if (object == null || getClass() != object.getClass()) return false;
DiscoverItems that = (DiscoverItems) object;
return Objects.equals(itemID, that.itemID);
}
@Override
public int hashCode() {
return Objects.hash(itemID);
}
2) Коллекция
Итак, измените:
List<DiscoverItems> items = new ArrayList<>();
на:
Set<DiscoverItems> items = new HashSet<>();
Когда вам нужна проверка в одном месте, вы можете преобразовать:
List ---> Set ---> List
например:
Set<DiscoverItems> set = new HashSet<>(items);
if (items.size() == set.size()) {
// No duplicates, use original list
} else {
// Duplicates removed, use new list
List<DiscoverItems> itemsWithoutDuplicates = new ArrayList<>(set);
}
или без дополнительных условий:
Set<DiscoverItems> set = new HashSet<>(items);
List<DiscoverItems> itemsWithoutDuplicates = new ArrayList<>(set);
или как одно- лайнер:
List<DiscoverItems> itemsWithoutDuplicates = new ArrayList<>(new HashSet<>(items));
Подсказка
Вы должны назвать свой класс DiscoverItem
, а не DiscoverItems
. Потому что он представляет ОДИН предмет, а не много.