Realm Android" in"查询排序

时间:2017-01-02 19:19:13

标签: android realm

使用Realm for Android,我为某些Realm对象提供了String[] objectIds个唯一ID。我试图以与String[] objectIds相同的顺序检索相应的Realm对象。

String[] objectIds = new String[]{"1", "10", "2", "3"};
RealmResults<MyRealmObject> myRealmObjects = realm.where(MyRealmObject.class).in("id", objectIds).findAll();

for(MyRealmObject obj: myRealmObjects) {
    log(obj.id)  //should print 1, 10, 2, 3
}

但是,使用.findAll()似乎会重新排序结果。如何使用&#34;&#34;中检索对象列表?并获得与objectIds数组相同的顺序?有没有更好的方法来解决这个问题?

即。我希望MyRealmObject.id == 1成为列表中的第一个结果,MyRealmObject.id == 10成为列表中的第二个结果,等等(与objectIds数组顺序相同)。

1 个答案:

答案 0 :(得分:2)

无法编写简单的查询来执行您想要的操作。最好的选择是做一些事情:

String[] objectIds = new String[]{"1", "10", "2", "3"};
RealmResults<MyRealmObject> myRealmObjects = realm.where(MyRealmObject.class).in("id", objectIds).findAll();
for (String id : objectIds) {
    MyRealmObject obj = myRealmObjects.where().equalTo("id", id).findFirst();
    log(obj.id);
}

当然,如果你确定存在带有id的对象,你可以稍微简化一下:

String[] objectIds = new String[]{"1", "10", "2", "3"};
for (String id : objectIds) {
    MyRealmObject obj = realm.where(MyRealmObject.class).equalTo("id", id).findFirst();
    log(obj.id);
}