14
Сен
2016

Как обеспечить уникальность коллекции объектов?

Есть ArrayList значений. При добавлении новых данных вся новая коллекция всегда попадает в исходный список. Как от этого избавиться?

Кейс: на экране есть список, по пул ту рефреш новые данные добавляются. Они могут быть точно такими же, что мы уже загрузили. Как сделать так, чтобы повторений не было?

for (Items item : response.body().getItems()) {
    if (!mItems.contains(i)) {
        mItems.add(i);
    }
}

Переопределил эти методы. Не помогает.

@Override
public boolean equals(Object o) {
    if (this == o)
        return true;
    if (o == null || getClass() != o.getClass())
        return false;

    Ad ad = (Ad) o;

    if (getSlug() != null ? !getSlug().equals(ad.getSlug()) : ad.getSlug() != null)
        return false;
    if (getLat() != null ? !getLat().equals(ad.getLat()) : ad.getLat() != null)
        return false;
    if (getLng() != null ? !getLng().equals(ad.getLng()) : ad.getLng() != null)
        return false;
    if (getKind() != null ? !getKind().equals(ad.getKind()) : ad.getKind() != null)
        return false;
    if (getTitle() != null ? !getTitle().equals(ad.getTitle()) : ad.getTitle() != null)

    ....

@Override
public int hashCode() {
    int result = getId();
    result = 31 * result + (getSlug() != null ? getSlug().hashCode() : 0);
    result = 31 * result + (getLat() != null ? getLat().hashCode() : 0);
    result = 31 * result + (getLng() != null ? getLng().hashCode() : 0);
    result = 31 * result + (getKind() != null ? getKind().hashCode() : 0);
    result = 31 * result + (isPremium() ? 1 : 0);
    result = 31 * result + getRoomsAmount();
    result = 31 * result + (getTitle() != null ? getTitle().hashCode() : 0);
    result = 31 * result + (getSpace() != null ? getSpace().hashCode() : 0);
    result = 31 * result + getImagesAmount();

Пробовал решения наподобие:

List<String> al = new ArrayList<>();
// add elements to al, including duplicates
Set<String> hs = new HashSet<>();
hs.addAll(al);
al.clear();
al.addAll(hs);

Не работает.

Источник: https://ru.stackoverflow.com/questions/566347/%D0%9A%D0%B0%D0%BA-%D0%BE%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B8%D1%82%D1%8C-%D1%83%D0%BD%D0%B8%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C-%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D0%B8-%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2

Share

Тебе может это понравится...