Как сортировать с помощью Realm?

Я не знаю, как сортировать с помощью Realm. Мой текущий код.

data = realm.objects(WorkoutSet)
data = data!.sorted("date")

Я хочу сортировать дату Int от больших чисел до низких чисел. Документам требуется дополнительная информация, а ссылка GitHub выдает сообщение 404.

Ответы

Ответ 1

Вы можете добавить ascending параметр к sorted методу:

data = data!.sorted("date", ascending: false)

Это сортирует ваш WorkoutSet, используя поле даты в порядке убывания.

Обновить

С Swift 3 и последней версией RealmSwift это теперь изменилось на:

data = data!.sorted(byKeyPath: "date", ascending: false)

Если вы хотите оценить критерии сортировки самостоятельно, вы можете использовать:

data = data!.sorted(by: { (lhsData, rhsData) -> Bool in
   return lshData.something > rhsData.something
})

Но имейте в виду, что сортировка ваших результатов сама по себе возвращает Array а не объект Realm Results. Это означает, что нагрузка на производительность и память будет выше, потому что Results ленивы, и если сортировка с помощью вышеуказанного метода, вы потеряете это ленивое поведение, потому что Realm должен оценивать каждый объект! Вы должны придерживаться результатов, когда это возможно. Используйте этот метод только в том случае, если нет другого способа сортировки ваших товаров.

Ответ 2

Использование Sort.ASCENDING или Sort.DESCENDING

import java.util.Date;

import io.realm.RealmModel;
import io.realm.annotations.Index;
import io.realm.annotations.PrimaryKey;
import io.realm.annotations.RealmClass;
import io.realm.annotations.Required;

@RealmClass
public class Pojo implements RealmModel {
    @Index
    @Required
    @PrimaryKey
    protected Long id;
    protected Date data_field;
    protected int int_field;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
}

import java.util.List;

import io.realm.Realm;
import io.realm.RealmQuery;
import io.realm.RealmResults;
import io.realm.Sort;

public class Dao {
    public List<Pojo> getAllById(Long id) {
        Realm realm = Realm.getDefaultInstance();
        RealmQuery<Pojo> query = realm.where(Pojo.class);
        query.equalTo("pojo_id", id);

        RealmResults<Pojo> result = query.findAll();

        result = result.sort("data_field", Sort.ASCENDING);
        result = result.sort("int_field", Sort.DESCENDING);

        //detaching it from realm (optional)
        List<Pojo> copied = realm.copyFromRealm(result);

        realm.close();

        return copied;
    }
}