2017-02-20 30 views
0

我想在Realm中進行查詢,但是從字段長度進行篩選。像這樣:按字符串大小進行篩選 - Android

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

我沒有找到任何與它有關的東西。有人知道這個問題的一個很好的解決方案嗎?

在此先感謝

+0

嗨我檢查了你的文件,我找不到任何東西。在https://realm.io/news/nspredicate-cheatsheet/(用於Swift中的Realm)中的NSPredicate Cheatsheet也沒有提及任何這樣的事情。也許效率低下,但我注意到使用正則表達式的選項。你能匹配字符串與檢查字符串長度的正則表達式嗎?例如'/^[a-zA-Z] {10,} $ /' – nbokmans

+0

是的,該工作!不幸的是,我的Realm版本沒有更新,所以在我們決定更新之前我不能使用類似的方法。 – iuri

+1

@nbokmans你不能用realm-android來評估正則表達式,但作爲查詢 – EpicPandaForce

回答

1

1)Realm.getDefaultInstance().where(...這個結構打開一個領域實例,你將永遠無法關閉,所以不這樣做。

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

當'realm'where(Something.class).findFrist(); 「如果是這樣,那麼這就要求制定者用一些標準的方式來寫。對?你能澄清一下嗎? – AnixPasBesoin

+0

當你爲該字段賦值時,你可以調用'setName()',這會起作用,是的 – EpicPandaForce