关于领域的另一个问题。
我有这个结构;
A类有一个B类,它有一个String名称。
我想按B b对A类列表进行排序,其名称为" xy";
所以这就是我尝试但不起作用的方式。
realm.where(A.class).findAllSorted("b.name",true);
这表示没有字段B.name。
任何想法我怎么能让它有效?
感谢。
答案 0 :(得分:5)
Realm还不支持按链接排序。有open issue跟踪此内容。
以下是Realm支持该功能之前的解决方法:
class A extends RealmObject {
private B b;
// Storing the b.name as a field of A when calling setB(). But
// remember you cannot do it by adding logic to setB() since Realm's
// proxy will override the setters. You can add a static method to
// achieve that.
private String bName;
// getters and setters
// This needs to be called in a transaction.
public static void setBObj(A a, B b) {
a.setB(b);
a.setBName(b.getName);
}
}
然后你可以按bName对结果进行排序,如:
realm.where(A.class).findAllSorted("bName",true);
答案 1 :(得分:1)
我同意@beeender,你也可以使用包装器来做java风格:
1.使用
定义A.class的包装器public class AWrapper {
public AWrapper(A a){
this.a = a;
}
private A a;
}
2。转换包装器中的所有RealmObject。有人这样想:
List<AWrapper> wrapped = new ArrayList<>();
for(A a : realmSet){
wrapped.add(new AWrapper(a))
}
实现自己的比较器以比较A.class
中的某些字段private class OwnComparator implements Comparator<AWrapper>{
@Override
int compare(AWrapper o1, AWrapper o2) {
return o1.someField.compareTo(o2.someField)
}
}
使用utils.Collections类进行排序
Collections.sort(wrapped, new OwnComparator())