454 Stimmen

Wie sortiert man Map-Werte nach Schlüssel in Java?

Ich habe eine Map, die Zeichenfolgen für Schlüssel und Werte hat.

Daten sind wie Folgendes:

"Frage1", "1"
"Frage9", "1"
"Frage2", "4"
"Frage5", "2"

Ich möchte die Karte anhand ihrer Schlüssel sortieren. Am Ende werde ich also Folgendes haben question1, question2, question3 ....und so weiter.

Letztendlich versuche ich, zwei Stränge aus dieser Karte herauszuholen.

  • Erste Saite: Fragen (in der Reihenfolge 1 ..10)
  • Zweite Saite: Antworten (in der gleichen Reihenfolge wie die Frage)

Im Moment habe ich Folgendes:

Iterator it = paramMap.entrySet().iterator();
while (it.hasNext()) {
    Map.Entry pairs = (Map.Entry) it.next();
    questionAnswers += pairs.getKey() + ",";
}

So erhalte ich die Fragen in einer Reihe, aber sie sind nicht in der richtigen Reihenfolge.

2voto

Manoj Singh Punkte 789
List<String> list = new ArrayList<String>();
Map<String, String> map = new HashMap<String, String>();
for (String str : map.keySet()) {
 list.add(str);
}
Collections.sort(list);
for (String str : list) {
 System.out.println(str);
}

2voto

Ankit Sharma Punkte 1115

Nur für den Fall, dass Sie nicht mit einem TreeMap

public static Map<Integer, Integer> sortByKey(Map<Integer, Integer> map) {
        List<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());
        list.sort(Comparator.comparingInt(Map.Entry::getKey));
        Map<Integer, Integer> sortedMap = new LinkedHashMap<>();
        list.forEach(e -> sortedMap.put(e.getKey(), e.getValue()));
        return sortedMap;
    }

Falls Sie Ihre Karte nach folgenden Kriterien sortieren möchten values einfach ändern Map.Entry::getKey a Map.Entry::getValue

1voto

Jonas_Hess Punkte 1608

In Java 8 können Sie auch .stream().sorted() verwenden:

myMap.keySet().stream().sorted().forEach(key -> {
        String value = myMap.get(key);

        System.out.println("key: " + key);
        System.out.println("value: " + value);
    }
);

1voto

Sandeep Punkte 1069

Eine gute Lösung ist vorgesehen aquí . Wir haben eine HashMap die Werte in nicht spezifizierter Reihenfolge speichert. Wir definieren ein Hilfsmittel TreeMap und wir kopieren alle Daten aus der HashMap in die TreeMap, indem wir die putAll Methode. Die resultierenden Einträge in der TreeMap sind in der Schlüsselreihenfolge.

1voto

iamdual Punkte 1079

Utilisez LinkedHashMap die den Schlüssel für die Bestellung liefern. Es ist auch gibt die gleiche Leistung mit HashMap . Sie beide implementieren Map Schnittstelle, so dass Sie einfach das Initialisierungsobjekt ersetzen können HashMap a LinkedHashMap .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X