Realm findAll with case insensitive on Android

时间:2017-01-18 20:04:51

标签: java android realm

我的联系人有一个列名,名字在Lower和upercase上。我想找到Case.INSENSITIVE的所有内容并且我没有找到任何答案。我应该怎么做?

我这样做:

realm.where(Contact.class).findAllAsync().sort("name")

3 个答案:

答案 0 :(得分:1)

截至2020年,Realm确实支持不区分大小写的查询。我在其中一个应用程序中使用了它,并且运行良好:

String searchText = "john"; // Some name
RealmResults<Person> persons = realm.where(Person.class).contains("username", searchText, Case.INSENSITIVE);

它将拉约翰,约翰,约翰等。

答案 1 :(得分:0)

排序方法尚不支持Case.INSENSITIVE标志。您应该获得所有结果,然后手动对其进行排序:

RealResults<Contact> list = realm.where(Contact.class)
    .findAll()
    .sort("name");

Collections.sort(list, new Comparator<Contact>() {
    @Override
    public int compare(Contact c1, Contact c2) {
        return c1.getName().compareToIgnoreCase(c2.getName());
    }
});

答案 2 :(得分:0)

Realm没有针对该问题的原生解决方案。

我已经解决了它使用lowerCases“name”创建一个额外的列,然后通过lowerCase进行排序,如下所示:

realm.where(Contact.class).findAllSortedAsync("lowerCase"));