2017-01-02 71 views
0

使用Realm for Android,我有一個String[] objectIds的某些Realm對象的唯一ID。我試圖以與String[] objectIds相同的順序檢索相應的Realm對象。Realm Android中的「in」查詢排序

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()似乎重新排序結果。如何使用「in」檢索對象列表並獲取與objectIds數組相同的順序?有沒有更好的方法來解決這個問題?

即我希望MyRealmObject.id == 1成爲列表中的第一個結果,MyRealmObject.id == 10成爲列表中的第二個結果等(與objectIds數組順序相同)。

+0

什麼是排序的標準是什麼? –

+0

@TimCastelijns我稍微更新了這個問題 - 我希望領域結果與「objectIds」數組中的字符串ID的順序相同。因此,ID爲1的「MyRealmObject」是第一個,ID 10是第二個,ID 2是第三個,等等。 – DiscDev

+0

findAllSorted應該工作,對不對? –

回答

1

這是不可能寫一個簡單的查詢來做你想做的。最好的辦法是做這樣的事情:

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); 
} 

當然,如果你確信與IDS對象都存在,你可以把它簡化一下:

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); 
} 
+0

我已經使用你提到的第二種方法作爲解決方法,我希望有一種更簡單的方法可以不使用內置的Realm函數進行循環。我會把這個標記爲正確的答案,直到更好的東西出現。 – DiscDev

+0

歡迎您通過https://github.com/realm/realm-java創建問題/功能請求 – geisshirt