Realm: избавиться от дублирования элементов в RealmList
Апдейт данных через createOrUpdateAllFromJson — удобная штука, однако без танцев с бубном не обошлось — данные из свойства объекта типа RealmList дублируются только в путь. Как это решить?

Итак, возьмем абстрактную задачу — есть курс обучения, в котором есть список студентов. Время от времени приложение запрашивает обновление с сервера, при этом локальные данные не хотелось бы терять. Метод Realm.createOrUpdateAllFromJson помогает в этом как нельзя лучше — пусть и немного кривоватое решение, но оно работает
If updating a {@link RealmObject} and a field is not found in the JSON object, that field will not be updated.Сохраняются все Realm модели у меня с помощью метода save(). Обычно в нем содержится что-то типа
Но конкретно в данном случае этот метод не прокатит. Поэтому пришлось написать следующую конструкцию (по шагам),
- Берем модель с обновленными данными (как они заполняются — не важно)
- Создаем массив с одним элементом — конкретно сохраняемым экземпляром класса
- Создаем json строку из массива
- Сохраняем ее с помощью createOrUpdateAllFromJson
(в этот момент можно открыть Realm Browser и убедиться, что после нескольких сейвов данные в RealmList дублируются только в путь). Поэтому
- Берем наше поле, удаляем в нем дубликаты и пересохраняем объект.
- Добавляем красоты, универсальности и вот этого всего.
Процедура сохранения объекта выглядит просто замечательно:
Ну и конечно же опишем интерфейс, который нам помогает все сделать чисто и симпатично:
P.S. Если вы попытались, но у вас не работает, подумайте — а что именно экземпляр делает уникальным?
Переопределите метод equals в вашем классе. Желательно, конечно, по primary key.

