2016-02-01 12 views
5

Ich mag umkehren eine geordnete Liste in der Karte mit dem folgenden drucken:Wie die Reihenfolge des SortedSet

Map<Float, String> mylist = new HashMap<>(); 

mylist.put(10.5, a); 
mylist.put(12.3, b); 
mylist.put(5.1, c); 

SortedSet<Float> orderlist = new TreeSet<Float>(mylist.keySet()); 

for (Float i : orderlist) { 
    System.out.println(i+" "+mylist.get(i)); 
} 

Der obigen Code druckt:

5.1 c 
10.5 a 
12.3 b  

Aber wie kann ich den Druck die Bestellliste in umgekehrter Reihenfolge wie unten:

12.3 b 
10.5 a 
5.1 c 
+0

gegen Sie sind die Elemente aus dem Satz in einer anderen Datenstruktur platzieren? Benötigen Sie zusätzlich die Artikel im SortedSet in der Reihenfolge, in der sie sich bereits befinden, oder wäre es in Ordnung, sie in umgekehrter Reihenfolge zu speichern? – augray

+0

Ich möchte nur die Liste drucken. Wenn es einen besseren Weg gibt, ist SortedSet nicht erforderlich. Es ist in Ordnung, wenn ich Elemente in umgekehrter Reihenfolge speichern kann. – user2109581

Antwort

2

Try NavigableSet zu verwenden:

public NavigableSet<E> descendingSet() 

So:

SortedSet<Float> orderlist = new TreeSet<Float>(mylist.keySet()); 
    SortedSet<Float> treereverse = new TreeSet<Float>(); 
    // creating reverse set 
    treereverse=(TreeSet)orderlist.descendingSet(); 

Schließlich haben Sie treereverse mit der umgekehrten Reihenfolge.

4

Wenn Sie bereit sind, die Elemente in der SortedSet in umgekehrter Reihenfolge zu speichern, ist die einzige Änderung, die Sie machen müssen, ist die TreeSet mit an appropriate constructor, die eine benutzerdefinierte Comparator nimmt zu konstruieren:

Map<Float, String> mylist = new HashMap<>(); 

mylist.put(10.5, a); 
mylist.put(12.3, b); 
mylist.put(5.1, c); 

SortedSet<Float> orderlist = new TreeSet<Float>(Collections.reverseOrder()); 
orderList.addAll(mylist.keySet()); 

for (Float i : orderlist) { 
    System.out.println(i+" "+mylist.get(i)); 
} 

Notiere die ordentlich Methode hier ist Collections.reverseOrder(), die eine Comparator zurückgibt, die im Gegensatz zu der natürlichen Reihenfolge der Elemente vergleicht.

+0

Danke, das ist großartig! – user2109581

+2

Kein Problem! [SO Etikette für ein Dankeschön ist eine positive und eine "als Antwort markieren"] (http://meta.stackexchange.com/questions/126180/is-it-acceptable-to-write-a-thank-you- in einem Kommentar) ;-) – augray

3

Sie können auch versuchen, diese:

Map<Float, String> mylist = new HashMap<Float, String>(); 
    mylist.put(10.5, a); 
    mylist.put(12.3, b); 
    mylist.put(5.1, c); 

    SortedSet<Float> orderlist = new TreeSet<Float>(mylist.keySet()).descendingSet(); 

    for (Float i : orderlist) { 
     System.out.println(i+" "+mylist.get(i)); 
    } 
Verwandte Themen