2017-02-05 2 views
2

Ich habe zwei Modellobjektklassen, die miteinander in Beziehung stehen:Nach Beziehungswert sortieren?

class Car { 

    private String model; 

    private Manufacturer manufacturer; 

    // getter and setter methods 

} 

Und:

class Manufacturer { 

    private String name; 

    // getter and setter methods 

} 

Wie Sie sehen können, werden die Objekte im Zusammenhang (für jedes Fahrzeug einen Hersteller hat).

Jetzt, in Realm, muss ich alle Autos bekommen, aber sortieren sie nach dem Namen ihres Herstellers. Wie kann ich nach einem Beziehungswert sortieren?

Gerade jetzt, alles, was ich diese:

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

Wie kann ich das durch den Namen des Herstellers, in aufsteigender Reihenfolge sortieren?

Antwort

-1

Sie brauchen so etwas wie, wie unten,

class MyComp implements Comparator<Manufacturer> 
    { 

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

} 
0

Sie haben wahrscheinlich bemerkt, aber realm.where(Car.class).findAllSorted("manufacturer.name", Sort.ASCENDING) (Link Art) ist noch nicht in Realm 2.3.x unterstützt

In Ihrem Fall wäre die einfachste Möglichkeit, die Vorteile von Realm als No-SQL-Datenbank zu nutzen und den Herstellernamen neben dem Hersteller zu speichern.

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

} 

Und:

class Manufacturer { 

    private String name; 

    // getter and setter methods 

} 

Jetzt können Sie tun:

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

nicht sicher, warum, aber es funktioniert nicht. Obwohl ich es kopiert und eingefügt habe, genau wie es ist. –

+0

Es scheint, dass es 'null' allen 'Herstellernamen' zuweist. Nicht sicher warum. –

+0

das ist nur möglich, wenn der 'Hersteller', den Sie gesetzt haben, 'null' ist oder ihr' name' null ist; aber es ist auch möglich, wenn Sie Realm 0.87.5 oder älter verwenden. – EpicPandaForce