如何在android中按字母顺序排序Realm Results列表?

时间:2016-09-02 10:38:44

标签: android realm

我有一个领域列表,我想按字母顺序对列表进行排序。

Collections.sort(contacts, new java.util.Comparator<Contacts>() {
        @Override
        public int compare(Contacts l1, Contacts l2) {
            String s1 = l1.getName();
            String s2 = l2.getName();

            return s1.compareToIgnoreCase(s2);
        }
 });

但是这个逻辑并不是我在下面发布崩溃报告,请详细说明。

java.lang.UnsupportedOperationException: Replacing and element is not supported.
at io.realm.RealmResults$RealmResultsListIterator.set(RealmResults.java:826
at io.realm.RealmResults$RealmResultsListIterator.set(RealmResults.java:757)at java.util.Collections.sort(Collections.java:1909)

请仔细阅读我的帖子并向我推荐一些解决方案。

3 个答案:

答案 0 :(得分:17)

排序Realm非常简单。

以下是一个例子:

假设您希望按名称对联系人列表进行排序,您应该在查询结果时对其进行排序,您将得到已经为您排序的结果。

有多种方法可以实现这个目标

示例:

1)简单和推荐的方式:

// for sorting ascending
RealmResults<Contacts> result = realm.where(Contacts.class).findAllSorted("name");

// sort in descending order
RealmResults<Contacts> result = realm.where(Contacts.class).findAllSorted("name", Sort.DESCENDING); 

2)未分类的结果

如果你得到未排序的结果,你可以用这种方式对它们进行排序。

RealmResults<Contacts> result = realm.where(Contacts.class).findAll();
result = result.sort("name"); // for sorting ascending

// and if you want to sort in descending order
result = result.sort("name", Sort.DESCENDING);

Have a look here您会找到有关Realm查询,排序和其他有用用法的非常详细的示例。

希望有所帮助

答案 1 :(得分:2)

从技术上讲,您应该使用以下内容:

RealmResults<Contacts> result = realm.where(Contacts.class)
                                     .findAllSorted("name", Sort.DESCENDING); 

建议使用findAll().sort()

答案 2 :(得分:1)

使用此选项可以在SORT_ORDER_ASCENDINGSORT_ORDER_DESCENDING

中进行排序
public void sort(java.lang.String[] fieldNames, boolean[] sortAscending) 

检查API参考Reference 1Reference 2