Java 按关系值排序?

Java 按关系值排序?,java,realm,realm-java,Java,Realm,Realm Java,我有两个相互关联的模型对象类: class Car { private String model; private Manufacturer manufacturer; // getter and setter methods } 以及: 如您所见,对象是相关的,每辆车都有一个制造商 现在,在领域中,我需要得到所有的汽车,但排序他们的制造商的名字。如何按关系值排序 现在,我只有这些: RealmResults<Car> cars = realm.wh

我有两个相互关联的模型对象类:

class Car {

    private String model;

    private Manufacturer manufacturer;

    // getter and setter methods

}
以及:

如您所见,对象是相关的,每辆车都有一个制造商

现在,在领域中,我需要得到所有的汽车,但排序他们的制造商的名字。如何按关系值排序

现在,我只有这些:

RealmResults<Car> cars = realm.where(Car.class).findAll();

如何按制造商名称按升序对其进行排序?

您需要以下内容:

   class MyComp implements Comparator<Manufacturer>
   {

    @Override
    public int compare(Manufacturer o1, Manufacturer o2) {
        // 
    // Compare the o1 properties with o2 properties
   }

}

你需要像下面这样的东西

   class MyComp implements Comparator<Manufacturer>
   {

    @Override
    public int compare(Manufacturer o1, Manufacturer o2) {
        // 
    // Compare the o1 properties with o2 properties
   }

}
您可能注意到了,但是realm.whereCar.class.findAllSortedmanufacturer.name、Sort.ASCENDING链接排序在realm 2.3.x中还不受支持

在您的例子中,最简单的方法是利用Realm作为无SQL数据库的优势,将制造商名称存储在制造商本身旁边

class Car {

    private String model;

    private Manufacturer manufacturer;

    private String manufacturerName;

    public void setManufacturer(Manufacturer manufacturer) {
        if(manufacturer == null) { 
           this.manufacturerName = null; // direct field access works since 0.88.0
        } else {
           this.manufacturerName = manufacturer.getName();
        }
        this.manufacturer = manufacturer;
    }

}
以及:

现在您可以执行以下操作:

RealmResults<Car> cars = realm.where(Car.class)
                              .findAllSorted("manufacturerName", Sort.ASCENDING);
您可能注意到了,但是realm.whereCar.class.findAllSortedmanufacturer.name、Sort.ASCENDING链接排序在realm 2.3.x中还不受支持

在您的例子中,最简单的方法是利用Realm作为无SQL数据库的优势,将制造商名称存储在制造商本身旁边

class Car {

    private String model;

    private Manufacturer manufacturer;

    private String manufacturerName;

    public void setManufacturer(Manufacturer manufacturer) {
        if(manufacturer == null) { 
           this.manufacturerName = null; // direct field access works since 0.88.0
        } else {
           this.manufacturerName = manufacturer.getName();
        }
        this.manufacturer = manufacturer;
    }

}
以及:

现在您可以执行以下操作:

RealmResults<Car> cars = realm.where(Car.class)
                              .findAllSorted("manufacturerName", Sort.ASCENDING);

不知道为什么,但它不起作用。尽管我复制并粘贴了它,但它似乎为所有的manufacturerNames分配了null。不确定原因。只有当您设置的制造商为空或其名称为空时,才可能出现这种情况;但如果您使用的是0.87.5或更高版本的Realm,这也是可能的。不知道为什么,但它不起作用。尽管我复制并粘贴了它,但它似乎为所有的manufacturerNames分配了null。不确定原因。只有当您设置的制造商为空或其名称为空时,才可能出现这种情况;但是,如果您使用的是0.87.5或更高版本的Realm,也可以这样做。