Java 域findAllSorted按字段的字段排序

Java 域findAllSorted按字段的字段排序,java,android,realm,Java,Android,Realm,另一个关于领域的问题 我有这个结构 类A有一个具有字符串名称的类B 我想按名为“xy”的B对A类列表进行排序 所以这就是我尝试的方式,但不起作用 realm.where(A.class).findAllSorted("b.name",true); 这表示没有字段B.name 你知道我该怎么做吗 谢谢。领域还不支持按链接排序。这里有一个追踪系统 以下是领域支持该功能之前的一个解决方法: class A extends RealmObject { private B b; // S

另一个关于领域的问题

我有这个结构

类A有一个具有字符串名称的类B

我想按名为“xy”的B对A类列表进行排序

所以这就是我尝试的方式,但不起作用

realm.where(A.class).findAllSorted("b.name",true);
这表示没有字段B.name

你知道我该怎么做吗


谢谢。

领域还不支持按链接排序。这里有一个追踪系统

以下是领域支持该功能之前的一个解决方法:

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);

我同意@beeender的观点,您也可以使用wrapper以java风格完成这项工作:

1.为具有的.class定义包装器

public class AWrapper {
    public AWrapper(A a){
        this.a = a;
    }

    private A a;
}
二,。转换包装器中的所有RealmObject。有人这样想:

List<AWrapper> wrapped = new ArrayList<>();
for(A a : realmSet){
   wrapped.add(new AWrapper(a))
}
List wrapped=new ArrayList();
对于(A:realmSet){
包装。添加(新AWrapper(a))
}
  • 实现您自己的比较器来比较某个类中的字段

    private class OwnComparator implements Comparator<AWrapper>{
       @Override
       int compare(AWrapper o1, AWrapper o2) {
           return o1.someField.compareTo(o2.someField)
       }
    }
    
    私有类OwnComparator实现Comparator{
    @凌驾
    int比较(AWrapper o1、AWrapper o2){
    返回o1.someField.compareTo(o2.someField)
    }
    }
    
  • 使用utils.Collections类进行排序

    Collections.sort(wrapped,new ownParator())


  • 领域还不支持按链接排序。跟踪此问题时存在一个未解决的问题。