Abrufen des Zeichenfolgenwerts von HashMap abhängig vom Schlüsselnamen

123

Ich habe eine HashMapmit verschiedenen Schlüsseln und Werten, wie kann ich einen Wert herausholen?

Ich habe einen Schlüssel in der Karte my_code, der eine Zeichenfolge enthalten soll. Wie kann ich das einfach erhalten, ohne die Karte durchlaufen zu müssen?

Bisher habe ich ..

   HashMap newMap = new HashMap(paramMap);
   String s = newMap.get("my_code").toString();

Ich erwarte ein String, wie "ABC" oder "DEF", wie ich es anfangs dort eingegeben habe, aber wenn ich ein mache, System.out.println()bekomme ich so etwas wiejava.lang.string#F0454

Entschuldigung, ich bin mit Karten nicht allzu vertraut, wie Sie wahrscheinlich erraten können;)

Jimmy
quelle

Antworten:

166

Einfach benutzen Map#get(key)?

Object value = map.get(myCode);

Hier ist ein Tutorial über Karten, das Sie vielleicht nützlich finden: http://java.sun.com/docs/books/tutorial/collections/interfaces/map.html .

Bearbeiten: Sie haben Ihre Frage folgendermaßen bearbeitet:

Ich erwarte einen String wie "ABC" oder "DEF", wie ich ihn ursprünglich dort eingegeben habe, aber wenn ich ein System.out.println () mache, bekomme ich so etwas wie java.lang.string # F0454

Entschuldigung, ich bin mit Karten nicht allzu vertraut, wie Sie wahrscheinlich erraten können;)

Sie sehen das Ergebnis von Object#toString(). Es java.lang.Stringsollte jedoch bereits eine implementiert sein, es sei denn, Sie haben eine benutzerdefinierte Implementierung mit einem Kleinbuchstaben sim Namen erstellt : java.lang.string. Wenn es sich tatsächlich um ein benutzerdefiniertes Objekt handelt, müssen Sie es überschreiben Object#toString(), um eine "vom Menschen lesbare Zeichenfolge" zu erhalten, wenn Sie ein System.out.println()oder toString()das gewünschte Objekt ausführen. Beispielsweise:

@Override
public String toString() {
    return "This is Object X with a property value " + value;
}
BalusC
quelle
1
Wenn Sie eine benutzerdefinierte Zeichenfolgenklasse erstellen, würde ich natürlich empfehlen, (1) dies nicht zu tun, da dies wahrscheinlich nicht das ist, was Sie tun möchten, und (2) wenn Sie dies tun möchten, fügen Sie es NICHT in das Feld ein java.lang-Namespace.
MatrixFrog
1
if HashMap <String, String> newMap = new HashMap <String, String> (); Wie bekomme ich ein String-Element daraus? wobei String value = newMap.get ("my_code"); gibt Fehler
sagteesh kilaru
wie kann man umkehren? Schlüssel vom Wert bekommen?
liefern
58

Wenn Sie Schlüssel / Werte als Zeichenfolgen speichern, funktioniert dies wie folgt:

HashMap<String, String> newMap = new HashMap<String, String>();
newMap.put("my_code", "shhh_secret");
String value = newMap.get("my_code");

Die Frage ist, was in der HashMap ausgefüllt wird (Schlüssel & Wert)

Jeff Porter
quelle
if HashMap <String, String> newMap = new HashMap <String, String> (); Wie bekomme ich ein String-Element daraus? wobei String value = newMap.get ("my_code"); gibt Fehler
sagteesh kilaru
11

Wenn Sie Generika verwenden und Ihre Karte als definieren

Map<String,String> map = new HashMap<String,String>();

dann Abrufen des Wertes als

 String s = map.get("keyStr"); 

Sie müssen weder map.get () typisieren noch die toString-Methode aufrufen, um den String-Wert abzurufen

Shirishkumar Bari
quelle
9

Ihre Frage ist leider überhaupt nicht klar. Ein Schlüssel hat keinen "Namen". Was die Karte betrifft, wird es nicht "genannt" - es ist nur ein Schlüssel und wird mit anderen Schlüsseln verglichen. Wenn Sie viele verschiedene Arten von Schlüsseln haben, empfehle ich Ihnen dringend, diese aus Gründen der Vernunft in verschiedene Karten einzutragen.

Wenn dies nicht hilft, klären Sie bitte die Frage - vorzugsweise mit einem Code, um zu zeigen, was Sie meinen.

Jon Skeet
quelle
7

map.get(myCode)

Abyx
quelle
6

Ein wichtiger Punkt, der hier zu beachten ist, ist, dass wenn Ihr Schlüssel ein Objekt einer benutzerdefinierten Klasse in Java ist, es ein Punkt ist, die Methode equals zu überschreiben. Weil die HashMap.get-Methode (Objektschlüssel) die equals-Methode zum Abgleichen des Schlüsselwerts verwendet. Wenn Sie die Methode equals nicht überschreiben, wird versucht, den Wert einfach anhand der Referenz des Schlüssels und nicht anhand des tatsächlichen Werts des Schlüssels zu ermitteln. In diesem Fall wird immer eine Null zurückgegeben.

Sreeja Mohan
quelle
gr8 Erklärung mam :)
eLemEnt
3

Angenommen, Sie haben HashMap wie folgt deklariert:

HashMap<Character,Integer> hs = new HashMap<>();

Dann ist der Schlüssel in der Karte vom Typ Zeichendatentyp und der Wert vom Typ int. Um nun einen Wert zu erhalten, der dem Schlüssel entspricht, unabhängig vom Schlüsseltyp, Werttyp und Syntax, gilt Folgendes: -

    char temp = 'a';
    if(hs.containsKey(temp)){
`       int val = hs.get(temp); //val is the value corresponding to key temp
    }

Entsprechend Ihrer Frage möchten Sie einen Zeichenfolgenwert erhalten, der einem Schlüssel entspricht. Deklarieren Sie dazu einfach HashMap als HashMap <"Datentyp des Schlüssels", "Datentyp des Werts" hs = new HashMap <> (); Wenn Sie dies verwenden, wird Ihr Code sauberer und Sie müssen das Ergebnis von hs.get ("my_code") nicht in einen String konvertieren, da standardmäßig der Wert des Strings zurückgegeben wird, wenn zum Zeitpunkt der Eingabe der Wert als String beibehalten wurde.

Gaurav Sachdeva
quelle
1

Dies ist ein weiteres Beispiel für die Verwendung der Funktionen keySet (), get (), values ​​() und entrySet (), um Schlüssel und Werte in einer Map abzurufen:

        Map<Integer, String> testKeyset = new HashMap<Integer, String>();

        testKeyset.put(1, "first");
        testKeyset.put(2, "second");
        testKeyset.put(3, "third");
        testKeyset.put(4, "fourth");

        // Print a single value relevant to a specified Key. (uses keySet())
        for(int mapKey: testKeyset.keySet())
            System.out.println(testKeyset.get(mapKey));

        // Print all values regardless of the key.
        for(String mapVal: testKeyset.values())
            System.out.println(mapVal.trim());

        // Displays the Map in Key-Value pairs (e.g: [1=first, 2=second, 3=third, 4=fourth])
        System.out.println(testKeyset.entrySet());
hel
quelle
0

Sie können die Methode get (Objektschlüssel) aus der HashMap verwenden. Beachten Sie, dass Ihre Schlüsselklasse in vielen Fällen die Methode equals überschreiben sollte, um eine nützliche Klasse für einen Map-Schlüssel zu sein.

Raffael
quelle
0
 HashMap<Integer, String> hmap = new HashMap<Integer, String>();
 hmap.put(4, "DD");

Der dem Schlüssel zugeordnete Wert 4istDD

Jabar Shahid
quelle