Как удалить все элементы с определенным идентификатором?

Android Studio 3.2

public class Profile extend RealmObject {
  @PrimaryKey
  private long id;
}

У меня есть List<Profile> profileList; В этом списке 5 профилей с id = 1, 2, ...

Хороший.

Теперь мне нужно удалить из профилей Realm с id=1 ,id=3, id=5

Таким образом, после удаления список должен содержать только 2 профиля с id=2 and id=4.

Как я могу это сделать?

P.S. Список идентификаторов - это динамический список. Сегодня у него 3 идентификатора, а завтра - 2 идентификатора.

Так вы пытаетесь удалить профили из списка или полностью удалить их из Realm?

EpicPandaForce 26.11.2018 16:46

Мне нужно полностью удалить из Realm.

a_subscriber 26.11.2018 16:48

как узнать, какие идентификаторы нужно удалить?

Shark 26.11.2018 17:18

Это доход как входящие параметры в методе: примерно так: myCustomDeleteMethod (List <Integer> idToDelete) {}

a_subscriber 26.11.2018 17:22
0
4
276
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Согласно документации Realm, вам нужно искать все возможные совпадения

// obtain the results of a query
final RealmResults<Profile> results = realm.where(Profile.class).equalTo("profile.id", 1).where().equalTo("profile.id", 3).where().equalTo("profile.id", 5).findAll();

// All changes to data must happen in a transaction
realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        // remove single match
        results.deleteFirstFromRealm();
        results.deleteLastFromRealm();

        // remove a single object
        Dog dog = results.get(5);
        dog.deleteFromRealm();

        // Delete all matches
        results.deleteAllFromRealm();
    }
});

Документ области

Но это статичный способ. Но предположим, что список идентификаторов динамический. Сегодня id = 1,2,3, а завтра может быть 4,5.

a_subscriber 26.11.2018 17:13

Используйте цикл, чтобы добавить все критерии.

Marcos Vasconcelos 26.11.2018 17:17

Этот RealmResults будет просто пустым списком. Условия следует сочетать с or(). Связанные запросы - это в основном and().

EpicPandaForce 26.11.2018 17:26
Ответ принят как подходящий

Что ж, на самом деле это довольно просто, учитывая, что это прямая поддержка ...

r.executeTransaction((realm) -> {
    realm.where(Profile.class).in("id", new Long[] { 1L, 3L, 5L }).findAll().deleteAllFromRealm();
});

См. https://realm.io/docs/java/latest/api/io/realm/RealmQuery.html#in-java.lang.String-java.lang.Long:A-

Другие вопросы по теме