如何在安卓中按字母顺序对Realm结果列表进行排序?

9

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

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)

请您仔细阅读我的帖子并为我提供一些解决方案。

可能是[按字母顺序排序ArrayList(不区分大小写)](https://dev59.com/4G025IYBdhLWcg3wwYz4)的重复问题。 - Vishal Patoliya ツ
1
public void sort(java.lang.String[] fieldNames, boolean[] sortAscending)。请查看API参考https://realm.io/docs/java/1.2.0/api/或https://realm.io/docs/java/0.80.0/api/io/realm/RealmResults.html。 - Sreehari
谢谢@Stallion,Sort.ASCENDING和Sort.DESCENDING也适用于字母顺序。我以为它只适用于整数。 - deeptimancode
@VishalPatoliya,是的,我们可以使用Comparator对普通的ArrayList进行排序,但我正在寻找一个Realm查询,它将返回按字母顺序排序的RealmResults列表。 - deeptimancode
如果它能够起作用,我想我可以将其作为答案并得到一枚赞 :) - Sreehari
3个回答

23

在 Realm 中,排序非常简单。

以下是一个示例:

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

有多种方法可以实现这一点。

示例:

1) Simple and Recommended way:
// 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); 

自5.0.0版本以来已更新

1) 简单且推荐的方法:

// for sorting ascending, Note that the Sort.ASCENDING value is the default if you don't specify the order
RealmResults<Contacts> result = realm.where(Contacts.class).sort("name").findAll();

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

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

请点击这里,您将会找到关于Realm查询、排序以及其他有用的用法的详细示例。


3

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

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

findAll().sort()不如推荐使用。


绝对的,我使用了这个查询,谢谢。 - deeptimancode

1
使用此功能可获取按照升序排序的 SORT_ORDER_ASCENDING 或按照降序排序的 SORT_ORDER_DESCENDING
public void sort(java.lang.String[] fieldNames, boolean[] sortAscending) 

请查看API参考文档参考文献1参考文献2


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接