У меня есть проблемы с пониманием RecyclerView
s SortedList
.Android: SortedList с дубликатами
Допустит, у меня есть очень простой класс только с очень простыми данными класса удерживающими:
public class Pojo {
public final int id;
public final char aChar;
public Pojo(int id, char aChar) {
this.id = id;
this.aChar = aChar;
}
@Override
public String toString() {
return "Pojo[" + "id=" + id
+ ",aChar=" + aChar
+ "]";
}
}
Я понимаю, что отсортированный список не будет содержать никаких дубликатов.
Но когда у меня есть SortedList с обратными вызовами, как это:
....
@Override
public boolean areContentsTheSame(Pojo oldItem, Pojo newItem) {
return oldItem.aChar == newItem.aChar;
}
@Override
public int compare(Pojo o1, Pojo o2) {
return Character.compare(o1.aChar, o2.aChar);
}
@Override
public boolean areItemsTheSame(Pojo item1, Pojo item2) {
return item1.id == item2.id;
}
Я в конечном итоге с дубликатами, когда я добавить несколько элементов с одинаковыми идентификаторами, но разных символов.
sortedList.add(new Pojo(1, 'a'));
sortedList.add(new Pojo(1, 'b'));
Я ожидал бы, что список будет обновлен. Вместо этого теперь у меня есть несколько элементов, хотя areItemsTheSame
вернулся true
.
В списке могут быть дубликаты. Попробуйте использовать hashMap. –
Из моего понимания не ["Если элемент уже существует в списке и его критерии сортировки не изменены, он заменяется на существующий элемент."] (Https://developer.android.com/reference/android/support/ v7/Util/SortedList.html # Add (T)). Мне не нужен HashMap, поскольку мне нужна эффективная связь с RecyclerView. –
Почему этот вопрос отмечен тегом Java? – Boris