Dies ist eine sehr grundlegende Frage, ich bin einfach nicht so gut mit Java. Ich habe eine Karte und möchte eine Liste oder etwas von den Schlüsseln in sortierter Reihenfolge bekommen, damit ich über sie iterieren kann.Wie kann ich die Schlüssel einer Map in Java sortieren?
Antwort
Verwenden Sie eine TreeMap
, die eine Implementierung der SortedMap
Schnittstelle ist. Es präsentiert seine Schlüssel in sortierter Reihenfolge.
Map<String, Object> map = new TreeMap<String, Object>();
/* Add entries to the map in any order. */
...
/* Now, iterate over the map's contents, sorted by key. */
for (Map.Entry<String, ?> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
Wenn Sie mit einer anderen Karte Implementierung arbeiten, die nicht, wie Sie sortiert möchten, können Sie es an die constructor von TreeMap
passieren eine neue Karte mit sortierten Schlüssel zu erstellen.
void process(Map<String, Object> original) {
Map<String, Object> copy = new TreeMap<String, Object>(original);
/* Now use "copy", which will have keys in sorted order. */
...
}
A TreeMap
Arbeiten mit jeder Art von Schlüssel, der den Comparable
-Schnittstelle implementiert, so dass sie in ihrer „natürlichen“ Ordnung zu bringen. Für Schlüssel, die nicht Comparable
sind, oder deren natürliche Reihenfolge nicht das ist, was Sie brauchen, können Sie Ihre eigene Comparator
implementieren und diese in der constructor angeben.
Sie haben mehrere Möglichkeiten. In der Reihenfolge der Präferenz:
- Verwenden Sie ein
SortedMap
:
SortedMap<whatever> myNewMap = new TreeMap<whatever>(myOldMap);
Dies ist erheblich vorzuziehen, wenn Sie mehr iterieren wollen als einmal. Es hält die Schlüssel sortiert, so dass Sie sie vor dem Iterieren nicht sortieren müssen. - Es gibt keine # 2.
- Es gibt auch keine # 3.
SortedSet<whatever> keys = new TreeSet<whatever>(myMap.keySet());
List<whatever> keys = new ArrayList<whatever>(myMap.keySet()); Collections.sort(keys);
Die letzten beiden werden Sie bekommen, was Sie wollen, aber nur verwendet werden, wenn man nur einmal zu durchlaufen wollen, und dann die ganze Sache vergessen.
In Schritt # 4 konnten Sie auch ein TreeSet (eine sortierte Menge) anstelle einer Liste erstellen, wodurch Sie keinen expliziten Aufruf von sort() durchführen müssen. –
@David: Ich habe daran gedacht, aber aus irgendeinem Grund habe ich vergessen, dass es möglich war, über ein Set zu iterieren. Es muss jedoch jedes Mal sortiert werden. –
hmm ich mag die # 4. Warum benötigt es mehr Sortierung als # 1?Ich hätte gedacht, es war genauso gut –
Sie können beim Iterieren eine sortierte Sammlung erstellen, aber es macht mehr Sinn, eine sortierte Karte an erster Stelle zu haben. (Wie bereits vorgeschlagen wurde)
Trotzdem, hier ist, wie Sie es tun.
- 1. Wie kann ich einen threadsafe Point-in-Time-Snapshot einer Schlüssel-Wert-Map in Java durchführen?
- 2. Wie kann ich eine STL-Map nach Wert sortieren?
- 3. Wie kann ich ResultSet in Java sortieren?
- 4. Wie ein Schlüssel einer Karte sortieren
- 5. Wie lese ich eine Map in einer anderen Map in Java?
- 6. Letzter Schlüssel in einer std :: map
- 7. So sortieren Sie C++ - Map-Schlüssel mit std :: greater?
- 8. Sortieren einer Datenstruktur in Java
- 9. Sortieren einer STL-Map vom niedrigsten zum höchsten Wert
- 10. Wie kann ich ein JSONArray in JAVA sortieren
- 11. HowTo sortieren std :: map?
- 12. Null-Schlüssel in Identity Map
- 13. Java Map entspricht in C#
- 14. Wie wird der Wert für einen bestimmten Schlüssel in einer Map in Java erhöht?
- 15. Wie Hash-Map-Schlüssel in Liste konvertieren?
- 16. Google Map-Schlüssel in Android?
- 17. Wie ersetzen/Namen Schlüssel in einem Javascript-Schlüssel: Wert-Map?
- 18. wie man google map api schlüssel zu google map in GWT basierte java applikation
- 19. Warum hat Java keine putIfAbsent-Methode (Schlüssel, Lieferant) in Map?
- 20. Ich kann das Google map map-Ereignis nicht verwenden, obwohl ich den API-Schlüssel erhalten habe
- 21. Wie kann ich den Inhalt einer Hash-Map ausgeben?
- 22. Wie kann ich gemischte Elemente in einer std :: map speichern?
- 23. Wie bekomme ich die ID einer Map-Aufgabe in Spark?
- 24. Eine Java Map drucken Map <String, Object> - Wie?
- 25. Wie kann ich ObservableCollection sortieren?
- 26. Sortieren von Objekten in Java mit Groß-/Kleinschreibung String-Schlüssel
- 27. Wie kann ich ExpandableListview sortieren?
- 28. Konvertieren einer Sammlung in Map durch Sortieren mit Java 8 Streams
- 29. Wie kann ich Scala-Map in Java-Map mit scala.Float zu java.Float k/v-Konvertierung konvertieren
- 30. Wie lese ich die Hadoop-Map-Datei mit Python?
Der Code, den ich konsumiere, gibt mir ein Map-Objekt, also wie kann ich es dann in eine TreeMap konvertieren oder eine TreeMap verwenden, um die Sortierung durchzuführen? – Bialecki
Sie können die TreeMap mit einem Konstruktor erstellen, dessen Parameter eine beliebige Map ist. Außerdem, Glückwunsch Erickson (ich nehme an, da Sie nur 5 rep von 10k entfernt sind). –
Ding! Erickson steigt auf. –