2017-05-04 4 views
1

Ich verwende Funktion, die Schlüsselwertpaar in LinkedHashMap zurückgibt.So erhalten Sie Wert in aufsteigender Reihenfolge von LinkedHashMap

LinkedHashMap<Integer,String> lhm = new LinkedHashMap<Integer,String>(); 

    // Put elements to the map 
    lhm.put(10001, "Stack"); 
    lhm.put(10002, "Heap"); 
    lhm.put(10003, "Args"); 
    lhm.put(10004, "Manus"); 
    lhm.put(10005, "Zorat"); 

Hinweis: Ich kann nicht LinkedHashMap jede andere Karte in meinem Code ändern, wenn die Funktion wird in mehreren anderen Funktionen verwendet werden.

Ich habe auch gegoogelt und versucht, TreeMap zu verwenden, die uns das gewünschte Ergebnis in aufsteigender Reihenfolge gibt. Aber hier in TreeMap ist der Schlüssel in aufsteigender Reihenfolge und nicht die Werte.

Meine Anforderung ist hauptsächlich für Werte.

Wie kann ich Werte in aufsteigender Reihenfolge erhalten?

Desired Output 

10003, "Args" 
10002, "Heap" 
10004, "Manus" 
10001, "Stack" 
10005, "Zorat" 

Vielen Dank im Voraus !!!!

+1

Mögliche Duplikat von [Sortieren einer Karte durch Werte (Java)] (http://stackoverflow.com/questions/109383/sort-a-mapkey-value-by-values-java) – vefthym

+0

Sie wollen einfach nur Druck es? Sie möchten keine LinkedHashMap mit den Einträgen nach Wert sortiert haben? –

+0

@RobinTopper ist in Ordnung, wenn ich mit LinkedHashMap Einträge nach Wert sortiert bekommen kann – Tatkal

Antwort

2

Sie benötigen einen Komparator für dieses

Comparator<Entry<String, String>> valueComparator = new 
            Comparator<Entry<String,String>>() { 
    @Override public int compare(Entry<String, String> e1, Entry<String, 
    String> e2) { 

    String v1 = e1.getValue(); String v2 = e2.getValue(); return 
    v1.compareTo(v2); 
} 
}; 
1

Sie können dies mit Strömen:

lhm.entrySet().stream().sorted(Map.Entry.comparingByValue()) 
    .forEach((e)->System.out.println(e.getKey() + ", " + e.getValue())); 

Vor genau gedruckt wird, was Sie wollen.

0

Diese Antwort beginnt das gleiche wie this answer, sondern bringt die sortierten Einträge zurück in eine LinkedHashMap:

LinkedHashMap<Integer,String> lhm2 = 
    lhm.entrySet().stream().sorted(Map.Entry.comparingByValue()) 
    .collect(Collectors.toMap(Entry::getKey, Entry::getValue,(a,b)->a, LinkedHashMap::new)); 

lhm2.forEach((k,v) -> System.out.println(k + ", " + v)); 
0
lhm.entrySet().stream() 
.sorted(Map.Entry.comparingByValue().reversed()) 
.collect(Collectors.toMap(Entry::getKey, Entry::getValue)); 

Dies wird sortieren Sie Ihre MAP in aufsteigender Reihenfolge.

Verwandte Themen