wake-up-neo.com

HashMap - First Key-Wert abrufen

Unten sind die Werte in der HashMap enthalten

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

Java-Code zum Abrufen des ersten Schlüssels (d. H. Aktiv)

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

Wie können wir den ersten Schlüssel "Wert" (d. H. 33) sammeln? Ich möchte sowohl den "Schlüssel" als auch den "Wert" in einer separaten Variablen speichern.

95
Prabu

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();

Beachten Sie, dass HashMap die Einfügereihenfolge nicht garantiert. Verwenden Sie ein LinkedHashMap, um die Reihenfolge beizubehalten.

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

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 "first", weil die HashMap-Einträge nicht sortiert sind.

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

48
Bohemian

Java 8 Art und Weise zu tun,

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

33
whoami

Sie können dies auch 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();

Dies, um nur den Schlüssel des ersten Eintrags zu erhalten,

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

Dies, um nur den Wert des ersten Eintrags zu erhalten,

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

Wenn Sie außerdem wissen, was Sie tun und das zweite (gleiche für das dritte usw.) Element einer Karte erhalten möchten, sollten Sie Folgendes versuchen:

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();
6

wie können wir den ersten Schlüssel "Wert" (d. h. 33) sammeln?

Mit youMap.get(keyYouHave) können Sie den Wert davon abrufen.

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

Ja, das können Sie einer Variablen zuweisen.

Warten Sie ......... 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 werden nicht in einer Bestellung gespeichert. Bitte beachten Sie diese Tatsache. Verwenden Sie eine Alternative, um Ihre Bestellung beizubehalten. Wahrscheinlich ein LinkedHashMap

4
Suresh Atta

Beachten Sie, dass die Einfügereihenfolge in einer Karte im Allgemeinen nicht eingehalten wird. Versuche dies :

    /**
     * Get the first element of a map. A map doesn't guarantee the insertion order
     * @param map
     * @param <E>
     * @param <K>
     * @return
     */
    public static <E,K> K getFirstKeyValue(Map<E,K> map){
        K value = null;
        if(map != null && map.size() > 0){
            Map.Entry<E,K> entry =  map.entrySet().iterator().next();
            if(entry != null)
                value = entry.getValue();
        }
        return  value;
    }

Ich benutze dies nur, wenn ich sicher bin, dass map.size() == 1.

1
Maxime Claude

Beachten Sie, dass Sie beachten sollten, dass Ihr Logikfluss niemals auf den Zugriff auf die HashMap -Elemente in einer bestimmten Reihenfolge angewiesen sein darf, einfach ausgedrückt, weil HashMaps nicht nach Collections sortiert sind und das nicht der Fall ist zielen darauf ab zu tun. (Weitere Informationen zu Bestell- und Sortiersammlungen finden Sie in dieser Beitrag ).

Zurück zum Beitrag haben Sie bereits die halbe Arbeit geleistet, indem Sie den ersten Elementschlüssel geladen haben:

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

Rufen Sie einfach map.get(key) auf, um den entsprechenden Wert zu erhalten:

Object myValue = statusName.get(myKey);
0
tmarwen

Verbesserung der whoami Antwort. Da findFirst() ein Optional zurückgibt, ist es ratsam, zu überprüfen, ob ein Wert vorhanden ist.

 var optional = pair.keySet().stream().findFirst();

 if (!optional.isPresent()) {
    return;
 }

 var key = optional.get();

Einige meinten auch, dass es unzuverlässig sei, den ersten Schlüssel eines HashSet zu finden. Aber manchmal haben wir HashMap Paare; in jeder Karte haben wir einen Schlüssel und einen Wert. In solchen Fällen ist es bequem, den ersten Schlüssel eines solchen Paares schnell zu finden.

0
Jan Bodnar