HashMap – Abrufen des ersten Schlüsselwerts

Lesezeit: 6 Minuten

Benutzer-Avatar
Prabu

Nachfolgend sind die in der HashMap enthaltenen Werte aufgeführt

statusName {Active=33, Renewals Completed=3, Application=15}

Java-Code zum Abrufen des ersten Schlüssels (dh aktiv)

Object myKey = statusName.keySet().toArray()[0];

Wie können wir den ersten Schlüssel “Wert” (dh 33) sammeln, ich möchte sowohl den “Schlüssel” als auch den “Wert” in einer separaten Variablen speichern.

  • Das ist dir klar HashMap Einträge sind ungeordnet, und so könnte sich “first” ändern, wenn Sie die Karte ändern?

    – NPE

    7. Oktober 2014 um 6:57 Uhr


  • Verstehst du, dass es keine bestimmte Reihenfolge in a gibt HashMap? Wenn Sie es überhaupt ändern, erhalten Sie möglicherweise die Ergebnisse in einer völlig anderen Reihenfolge.

    – Jon Skeet

    7. Oktober 2014 um 6:57 Uhr

  • Nein, die Reihenfolge ist nicht von Lauf zu Lauf garantiert, aber innerhalb des gleichen Threads kann man sich auf die Reihenfolge verlassen.

    – hd1

    7. Oktober 2014 um 6:58 Uhr

  • @JonSkeet Eigentlich ist das eine wirklich berechtigte Frage. In Groovy gibt es viele Fälle, in denen Sie eine Struktur zurückerhalten, die wie eine Liste von Karten aussieht, jede Karte mit einem einzigen Eintrag. Bisher habe ich keinen einfachen/offensichtlichen (Groovy) Weg gefunden, alle Werte auszudrucken. Wenn die Schlüssel konstant sind, ist es so einfach wie collection.each{println it.key}, jeden Wert auszudrucken, aber ohne konstante Schlüssel ist es nicht offensichtlich, aber collection.each{println it.values()[0]} funktioniert (Eine Verfeinerung einiger Antworten hier …).

    – Bill K

    26. August 2016 um 19:30 Uhr


  • @BillK: Wenn Sie wissen, dass jede Karte genau einen Eintrag hat, dann ist das wirklich eine andere Frage und eine, die sinnvoller ist.

    – Jon Skeet

    26. August 2016 um 19:48 Uhr

Benutzer-Avatar
Ruchira Gayan Ranaweera

Sie können dies versuchen:

 Map<String,String> map = new HashMap<>();
 Map.Entry<String,String> entry = map.entrySet().iterator().next();
 String key = entry.getKey();
 String value = entry.getValue();

Merken Sie sich, HashMap garantiert nicht die Anzeigenreihenfolge. Verwenden ein LinkedHashMap um die Ordnung intakt zu halten.

Z.B:

 Map<String,String> map = new LinkedHashMap<>();
 map.put("Active","33");
 map.put("Renewals Completed","3");
 map.put("Application","15");
 Map.Entry<String,String> entry = map.entrySet().iterator().next();
 String key= entry.getKey();
 String value=entry.getValue();
 System.out.println(key);
 System.out.println(value);

Ausgabe:

 Active
 33

Aktualisieren: Erste Taste eingeben Java 8 oder höhere Versionen.

Optional<String> firstKey = map.keySet().stream().findFirst();
if (firstKey.isPresent()) {
    String key = firstKey.get();
}

  • Ich weiß, dass dies eine sehr alte Antwort ist. Dies funktioniert für Hashmaps mit Schlüssel und Wert als Zeichenfolgen. aber wenn Sie dasselbe mit einem Objekt für einen Wert versuchen, erhalten Sie einen Casting-Fehler: com.google.gson.internal.LinkedTreeMap cannot be cast to... … meine Klasse, die ich anstelle der angegeben habe String an der richtigen Stelle … kann online keine Antwort finden … Hilfe

    – Blauer Bot

    21. November 2017 um 11:03 Uhr


  • @darthydarth Sie sollten den richtigen Typ basierend auf Ihrem Kontext verwenden.

    – Ruchira Gayan Ranaweera

    21. November 2017 um 11:28 Uhr

  • erstmal super danke für die antwort! Ich hatte es nicht erwartet … als zweites habe ich festgestellt, dass es ein Problem mit Generika gibt, die nicht zur Laufzeit gespeichert werden. schließlich habe ich es mit gehackt Gson Wertobjekt in a umwandeln String und parse es dann zurück zu meinem Klassentyp. Es ist hässlich, aber ich konnte wirklich keine andere Lösung für etwas finden, das in anderen Sprachen so einfach ist (ich lerne jetzt Java).

    – Blauer Bot

    21. November 2017 um 11:38 Uhr

  • sicher aber wie? Es ist zu viel für den Kommentarbereich

    – Blauer Bot

    21. November 2017 um 12:55 Uhr

  • @darthydarth du kannst mir eine E-Mail schicken. [email protected]

    – Ruchira Gayan Ranaweera

    21. November 2017 um 15:58 Uhr


Benutzer-Avatar
Bohemien

So erhalten Sie den “ersten” Wert:

map.values().toArray()[0]

So erhalten Sie den Wert des “ersten” Schlüssels:

map.get(map.keySet().toArray()[0])

Hinweis: Der obige Code wurde getestet und funktioniert.

Ich sage “zuerst”, weil HashMap-Einträge nicht geordnet sind.

Eine LinkedHashMap iteriert jedoch ihre Einträge in derselben Reihenfolge, in der sie eingefügt wurden – Sie könnten dies für Ihre Kartenimplementierung verwenden, wenn die Reihenfolge der Einfügung wichtig ist.

  • Sie müssen zuerst überprüfen, ob die Karte nicht leer ist

    – ACV

    14. August 2018 um 10:25 Uhr

Java 8 Vorgehensweise,

String firstKey = map.keySet().stream().findFirst().get();

  • Wenn wir den Schlüssel haben, rufen Sie den ersten Wert mit map.get(firstKey) ab. Nur ein Hinweis. 🙂

    – Upen

    30. August 2019 um 22:42 Uhr

  • Verwenden Sie diesen Ansatz NICHT! Wenn die map Variable ist vom Typ HashMap, dies wird NICHT zuverlässig funktionieren, konvertieren Sie stattdessen in ein Array oder LinkedHashMap!

    – Tobias Kaufmann

    3. Februar 2021 um 17:07 Uhr

Benutzer-Avatar
Georgios Syngouroglou

Sie können auch Folgendes versuchen, um den gesamten ersten Eintrag zu erhalten:

Map.Entry<String, String> entry = map.entrySet().stream().findFirst().get();
String key = entry.getKey();
String value = entry.getValue();

Das Folgende zeigt, wie Sie den Schlüssel des ersten Eintrags erhalten können,

String key = map.entrySet().stream().map(Map.Entry::getKey).findFirst().get();
// or better
String key = map.keySet().stream().findFirst().get();

Das Folgende zeigt, wie Sie den Wert des ersten Eintrags erhalten können,

String value = map.entrySet().stream().map(Map.Entry::getValue).findFirst().get();
// or better
String value = map.values().stream().findFirst().get();

Falls Sie außerdem das zweite (dasselbe für das dritte usw.) Element einer Karte erhalten möchten und bestätigt haben, dass diese Karte mindestens 2 Einträge enthält, können Sie Folgendes verwenden.

Map.Entry<String, String> entry = map.entrySet().stream().skip(1).findFirst().get();
String key = map.keySet().stream().skip(1).findFirst().get();
String value = map.values().stream().skip(1).findFirst().get();

Kotlin-Antwort

Holen Sie sich den ersten Schlüssel und dann den Wert des Schlüssels. Kotlin hat “Erste()“Funktion:

val list = HashMap<String, String>() // Dummy HashMap.

val keyFirstElement = list.keys.first() // Get key.

val valueOfElement = list.getValue(keyFirstElement) // Get Value.

Benutzer-Avatar
DerVerloreneGeist

Wie können wir den ersten Schlüssel “Wert” (dh 33) sammeln?

Durch die Nutzung youMap.get(keyYouHave)können Sie den Wert davon erhalten.

möchten sowohl den “Schlüssel” als auch den “Wert” in einer separaten Variablen speichern

Ja, das kannst du einer Variablen zuweisen.

Warte ……… es ist noch nicht vorbei.

Wenn Sie (Geschäftslogik) von der Reihenfolge des Einfügens und Abrufens abhängig sind, werden Sie seltsame Ergebnisse sehen. Die Karte ist nicht bestellt, sie wird nicht in einer Bestellung gespeichert. Bitte seien Sie sich dieser Tatsache bewusst. Verwenden Sie eine Alternative, um Ihre Bestellung beizubehalten. Wahrscheinlich ein LinkedHashMap

Benutzer-Avatar
Gemeinschaft

Beachten Sie, dass Ihr Logikfluss niemals auf den Zugriff auf die angewiesen sein darf HashMap Elemente in einer bestimmten Reihenfolge, einfach gesagt, weil HashMaps werden nicht bestellt Collections und das ist nicht das, was sie bezwecken. (In diesem Beitrag können Sie mehr über geordnete und sortierte Sammlungen lesen).

Zurück zum Beitrag, Sie haben bereits die Hälfte der Arbeit erledigt, indem Sie den ersten Elementschlüssel geladen haben:

Object myKey = statusName.keySet().toArray()[0];

Ruf einfach an map.get(key) um den jeweiligen Wert zu erhalten:

Object myValue = statusName.get(myKey);

1353060cookie-checkHashMap – Abrufen des ersten Schlüsselwerts

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy