-1
的境界文檔中的長度域,它被寫入排序與串
result = result.sort("name", Sort.DESCENDING);
簡單的排序,但我想首先
通常在MySQL,我們有
order by CHAR_LENGTH(Field)
最短名稱排序
在這方面有沒有像這樣的方法?
的境界文檔中的長度域,它被寫入排序與串
result = result.sort("name", Sort.DESCENDING);
簡單的排序,但我想首先
通常在MySQL,我們有
order by CHAR_LENGTH(Field)
最短名稱排序
在這方面有沒有像這樣的方法?
沒有,但你可以很容易地重新定義的制定者,因爲0.88.0,你做到以下幾點:
public class Word extends RealmObject {
private String name;
@Index
@Required
private long nameLength;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
this.nameLength = name == null ? 0 : name.length();
}
}
而且你可以指定將創建此預先存在的元素
public class Migration implements RealmMigration {
@Override
public void migrate(final DynamicRealm realm, long oldVersion, long newVersion) {
RealmSchema schema = realm.getSchema();
if(oldVersion == 0) {
RealmObjectSchema wordSchema = schema.get("Word");
wordSchema.addField("nameLength", long.class, FieldAttribute.INDEXED, FieldAttribute.REQUIRED)
.transform(new RealmObjectSchema.Function() {
@Override
public void apply(DynamicRealmObject obj) {
obj.set("nameLength", obj.getString("name").length());
}
});
oldVersion++;
}
}
@Override
public void equals(Object object) {
return object != null && object instanceof Migration;
}
@Override
public int hashCode() {
return Migration.class.hashCode();
}
}
RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(context)
.schemaVersion(1)
.migration(new Migration())
.build();
遷移
然後,你可以很容易地做到
realm.where(Word.class).findAllSorted(WordFields.NAME_LENGTH, Sort.ASCENDING,
WordFields.NAME, Sort.ASCENDING);
這將在安裝後運行一次,以創造新的領域?這還需要很長時間才能運行150000個對象? – phpdroid
以及你**可以**也可以將此字段添加到您的資產文件中,然後您將不必指定遷移 – EpicPandaForce
更好的是我將重建數據庫的長度爲'name'字段 – phpdroid