如何确保根据ids整数数组的排序顺序对RealmResult
进行排序?
public static RealmResults<ContentPage> getContentPages(Realm realm, Integer[] ids) {
return realm.where(ContentPage.class)
.in(ContentPage.FIELD_ID, ids).findAll();
}
因此,我正在寻找一种基于id数组中的id位置对
ContentPage
对象进行排序的方法。我没有把这个
RealmResult
转换成一个列表,它是一个自动管理的对象,因此在检索之后我不能对它运行一个普通的Comparator
。*编辑:如果我尝试在realmresult上使用普通比较器,我将得到:unsupportedoperationexception:replacing和element不受支持。
*编辑2:我的问题似乎不清楚:如果我有这样的ids数组:
[3,1,2]
。这将进入到上面的.in(ContentPage.FIELD_ID, ids)
中。我希望realmresult的顺序是:首先是id为3的项,然后是1,最后是2。*编辑3:通过在realmresult每次更改时创建一个新的arraylist(使用realmchangelister)并在我的应用程序中进一步使用它来修复。可以对复制的数组进行排序。不理想,只是暂时的解决办法。
List copiedList = new ArrayList<>(getPagesResult);
Collections.sort(copiedList, comparator);
最佳答案
结论:realm不支持。
可以通过在每次更改时从ArrayList
创建一个新的RealmResult
(使用RealmChangeListener
)并在应用程序中使用它来解决此问题。可以对复制的数组进行排序。不是很理想,但可以解决问题。
List copiedList = new ArrayList<>(getPagesResult);
Collections.sort(copiedList, comparator);
如果您使用的是
RealmRecyclerViewAdapter
这个方法行不通,那么您需要使用RealmResult
来实现这一点。此外,该解决方案还取消了使用RealmResults
的其他细节。关于android - Android Realm :按ID列表排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46221624/