2017-09-14 56 views
2

如何確保RealmResult是基於ids整數數組的排序順序排序的?Realm Android:按名單排序

public static RealmResults<ContentPage> getContentPages(Realm realm, Integer[] ids) { 

     return realm.where(ContentPage.class) 
       .in(ContentPage.FIELD_ID, ids).findAll(); 
    } 

所以我在尋找一種方法來ContentPage對象進行排序的基礎上,ids數組中的編號位置。

我不會將這RealmResult轉換爲一個列表,它是一個自動管理的對象,所以我不能在檢索後運行它的正常Comparator

*編輯:如果我嘗試在RealmResult上使用普通比較器,我會得到:UnsupportedOperationException:替換和元素不受支持。

*編輯2:我的問題似乎不清楚:如果我有這樣的IDS數組:[3,1,2]。這進入.in(ContentPage.FIELD_ID, ids)以上。我希望RealmResult的順序如下:首先是id 3,後面是1,最後是2。

*編輯3:通過每次RealmResult創建一個新的ArrayList(使用Realm ChangeListener)並在我的應用程序中進一步使用它來修復。您可以對此複製的數組進行排序不理想,但是一個臨時解決方案。

return realm.where(ContentPage.class) 
      .in(ContentPage.FIELD_ID, ids).findAllSorted("id",Sort.DESCENDING); 
+0

但RealmResults已經有了.sort()方法,所以不需要轉換爲數組,或者我完全失去了,並且不能很好地使你xD –

+0

:)如上所見,運行.sort()方法RealmResult給出「UnsupportedOperationException:替換並且元素不受支持」。 – Frank

回答

2

結論:它不支持Realm。

可以通過從RealmResult每次更改(使用RealmChangeListener)並在應用程序中使用它創建一個新的ArrayList來解決此問題。您可以對此複製的數組進行排序不理想,但是一個工作解決方案。

List copiedList = new ArrayList<>(getPagesResult); 
Collections.sort(copiedList, comparator); 

如果您使用的是RealmRecyclerViewAdapter這將無法工作,雖然,你需要的RealmResult了點。此外,這種解決方案帶走了使用RealmResults的其他細節。

0

您可以在query`結束

.findAllSorted(ContentPage.FIELD_ID, Sort.ASCENDING); 
+0

不,我正在查找:「根據ids整數數組的排序順序排序」,因此與「in(...)」順序相比較。 Ids可能會根據任何東西排序 – Frank

0

只使用findAllSorted取代findAll();findAllSorted();

return realmResults.get(sortArray[i-1]-1); 
+1

有人已將此發佈爲答案。不需要再說一遍 –

+0

好吧,他比我快:D –

+0

不,我在找:「根據ids整數數組的排序順序排序」,所以與「in(...)」比較訂購。 Ids可能會被分類。 – Frank

0

老實說:

List copiedList = new ArrayList<>(getPagesResult); 
Collections.sort(copiedList, comparator); 
+0

只能檢索一個項目? – Frank

+0

只要你有你的「排序數組」,你可以得到他們中的任何一個。 – EpicPandaForce

+0

我想要對RealmResult進行排序。不要複製列表,也不要將它們逐個拿出來放在新列表中。顯然你不能在查詢完成後對它進行排序,而不會複製到新列表中,所以我一直在尋找一種方法來更新查詢,以便在查詢中對查詢中的項目進行排序,並基於id列表進行排序。我想這是不可能的。 – Frank