2017-02-20 11 views
0

Я хочу сделать запрос в Realm, но отфильтровать его из длины поля. Что-то вроде этого:Фильтр по размеру строки в области - Android

Realm.getDefaultInstance() 
     .where(Person.class) 
     .greaterThan("name.length", 10) 
     .findAll() 

Я не нашел в этом ничего похожего. Кто-нибудь знает хорошее решение этой проблемы?

Заранее спасибо

+0

Привет, я проверил документацию для вас, и я ничего не смог найти. Кошелек NSPredicate на https://realm.io/news/nspredicate-cheatsheet/ (используется для Realm in Swift) также не упоминает ничего подобного. Возможно, неэффективно, но я заметил возможность использовать регулярное выражение. Не могли бы вы совместить строку с регулярным выражением, которое проверяет длину строки? Например, '/^[a-zA-Z] {10,} $ /' – nbokmans

+0

Да, это должно сработать! К сожалению, моя версия Realm не обновляется, поэтому я не могу использовать подобный метод до тех пор, пока мы не решим обновить. – iuri

+1

@nbokmans вы не можете оценивать регулярное выражение с помощью realm-android еще как запрос – EpicPandaForce

ответ

1

1.) Realm.getDefaultInstance().where(... эта конструкция открывает экземпляр Realm, что вы никогда не сможете закрыть, так что не делать этого.

2.) Создайте «вычисленное свойство», как описано here, и выполните запрос на основе этого.

public class Something extends RealmObject { 
    private String name; 
    @Index 
    private int nameLength; 

    public void setName(String name) { 
     this.name = name; 
     this.nameLength = name == null ? 0 : name.length(); 
    } 
} 

Это решение работает в Realm-Java 0.88.0 и выше.

+0

Будет ли 'setName()' вызываться 'Realm', если скажем, что-то вроде' realm.where (Something.class) .findFrist(); 'Если это так, то это требует, чтобы сеттеры были написаны каким-то стандартным образом. Правильно? Не могли бы вы пояснить. – AnixPasBesoin

+0

Вы вызываете 'setName()' когда вы присваиваете значение полю, и это будет работать, да – EpicPandaForce