2016-04-11 5 views
1

Ich habe einen HashMap mit folgenden Einträgen:Eine HashMap per Key bestellen?

Key - Hund Objekt Wert - Beschreibung der Hunde

Map<Dog, List<String>> DogsAndDescriptions; 

ich von "Älteste Dog First" die HashMap bestellen möchten.

Hund ist ein Entity, die das folgende Feld hat, das ich von bestellen möchte:

@Column(name = "BIRTHDAY") 
    @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime") 
    private DateTime birthday; 

Ist es möglich, dies zu tun?

+0

1) Holen Sie sich Ihre Karte 2) Get Key Set 3) In Liste umwandeln 4) Sortieren nach Alter 5) Verwenden Sie die Tasten aus dieser Liste. –

+1

Verwenden Sie TreeMap, wenn Sie die Schlüssel bestellen möchten. – Eran

+0

@Eran Wahrscheinlich bekommt er es von DB. Nicht sicher. –

Antwort

5

Dies ist nicht wirklich möglich, da HashMaps speziell eine ungeordnete Liste sind.

Sie könnten java.util.LinkedHashMap verwenden, die Reihenfolge verwendet, aber was ich denke, dass Sie wirklich wollen, ist TreeMap, die natürliche Reihenfolge der Elemente darin unterstützen wird.

Wenn Sie einen Komparator hinzufügen, der den ältesten Hund ausspuckt, dann sortieren Sie die TreeMap in dieser Reihenfolge für Sie.

Eine TreeMap ist eine Implementierung der Map Schnittstelle, so dass Sie auf die gleiche Weise damit interagieren wie Sie gerade jetzt tun.

Würde eine Instanz Ihrer (nicht groß geschriebenen Variablen) dogsAndDescriptions Map instanziieren. Was Sie als Teil des TreeMap Konstruktor tun kann, ist weiter in einem Comparator, die regieren wird, wie Sie Ihre Hunde als Schlüssel sortiert bekommen, oder Dog-Klasse machen erweitern Vergleichbare und überschreiben die Methode compareTo im Grunde so etwas wie

class Dog implements Comparable<Dog>{ 
    //somecode 

    @Override 
    public int compareTo(Dog o) { 
     return birthday.compareTo(o.birthday); 
    } 
} 

So können Sie sehen Sie, dass Hunde auf ihrem Geburtstag vergleichen werden. Ich werde auf eine example here verknüpfen, wie Komparatoren arbeiten, ist eine andere Frage, denke ich. Aber das sind 2 Möglichkeiten, sie zu sortieren.

+0

Ok, kannst du bitte ein Beispiel geben?Ich bin nicht vertraut mit der Treemap Datenstruktur – java123999

+1

Ich habe meine Antwort für Sie etwas mehr Details hinzugefügt. –

+0

Danke, ich bin mir nicht sicher Wenn ich klar genug wäre, würde ich lieber die KEYS in der Map bestellen als die Werte in ihnen. Zum Beispiel: Der Schlüssel A sollte vor Schlüssel B kommen, wenn Schlüssel A einen älteren Hund als Schlüssel B enthält, ist das möglich? – java123999

1

Implementieren Comparable<Dog> Schnittstelle in Ihrer Dog Klasse mit Implementierung, die Dog ‚s birthday und TreeMap<Dog, List<String>>Dog Objekte darin zu speichern, verwenden compere würde. Im Folgenden finden Sie Beispielimplementierung für Dog Klasse:

class Dog implements Comparable<Dog>{ 
     public Dog(String name, Date dob) { 
      this.name = name; 
      this.birthday = dob; 
     } 

     private String name; 
     private Date birthday; 

     @Override 
     public int compareTo(Dog o) { 
      return birthday.compareTo(o.birthday); 
     } 

     @Override 
     public String toString() { 
      return name; 
     } 
    } 

Hinweis: Ich habe Kenntnis der Einfachheit halber zusätzliche Anmerkung verwendet.

Sie können HashMap nicht verwenden, um eine Sortierreihenfolge unter Dog zu erhalten, da HashCode keine Reihenfolge beibehält. Für weitere Informationen, siehe: Difference between HashMap, LinkedHashMap and TreeMap