pobierz wartość ciągu z HashMap w zależności od nazwy klucza

123

Mam kartę HashMapz różnymi kluczami i wartościami, jak mogę uzyskać jedną wartość?

Mam klucz w mapie o nazwie my_code, powinien zawierać ciąg, jak mogę to uzyskać bez konieczności iteracji po mapie?

Jak dotąd mam ...

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

Spodziewam się zobaczyć String„ABC” lub „DEF”, ponieważ to właśnie tam wstawiłem na początku, ale jeśli to zrobię System.out.println(), otrzymam coś w rodzajujava.lang.string#F0454

Przepraszam, nie jestem zaznajomiony z mapami, jak pewnie się domyślasz;)

Jimmy
źródło

Odpowiedzi:

166

Po prostu użyj Map#get(key)?

Object value = map.get(myCode);

Oto samouczek dotyczący map, który może okazać się przydatny: http://java.sun.com/docs/books/tutorial/collections/interfaces/map.html .

Edycja: edytowałeś swoje pytanie za pomocą:

Spodziewam się zobaczyć ciąg znaków, taki jak „ABC” lub „DEF”, ponieważ to właśnie tam wstawiłem na początku, ale jeśli wykonam System.out.println (), otrzymam coś takiego jak java.lang.string # F0454

Przepraszam, nie jestem zaznajomiony z mapami, jak pewnie się domyślasz;)

Widzisz wynik Object#toString(). Ale java.lang.Stringpowinien już jeden realizowane, chyba że stworzył własny realizację z małej litery sw nazwie: java.lang.string. Jeśli w rzeczywistości jest to obiekt niestandardowy, musisz nadpisać, Object#toString()aby uzyskać „ciąg czytelny dla człowieka” za każdym razem, gdy wykonujesz polecenie System.out.println()lub toString()na żądanym obiekcie. Na przykład:

@Override
public String toString() {
    return "This is Object X with a property value " + value;
}
BalusC
źródło
1
Oczywiście, jeśli tworzysz niestandardową klasę ciągów, radziłbym (1) tego nie robić, ponieważ prawdopodobnie nie jest to to, co chcesz zrobić, i (2) jeśli masz zamiar to zrobić, NIE umieszczaj tego w przestrzeń nazw java.lang.
MatrixFrog
1
if HashMap <String, String> newMap = new HashMap <String, String> (); jak uzyskać element string z tego ...? gdzie wartość String = newMap.get ("mój_kod"); daje błąd
saidesh kilaru
jak można odwrócić? uzyskać klucz od wartości?
58

Jeśli przechowujesz klucze / wartości jako ciągi, to zadziała:

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

Pytanie brzmi, co zostanie zapełnione w HashMap (klucz i wartość)

jeff porter
źródło
if HashMap <String, String> newMap = new HashMap <String, String> (); jak uzyskać element string z tego ...? gdzie wartość String = newMap.get ("mój_kod"); daje błąd
saidesh kilaru
11

Jeśli użyjesz opcji Generics i zdefiniujesz swoją mapę jako

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

następnie pobieranie wartości jako

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

nie będziesz musiał typecast map.get () ani wywoływać metody toString, aby uzyskać wartość String

Shirishkumar Bari
źródło
9

Obawiam się, że twoje pytanie nie jest jasne. Klucz nie ma „nazwy”; nie nazywa się go niczym, jeśli chodzi o mapę - to tylko klucz i będzie porównywany z innymi kluczami. Jeśli masz wiele różnych rodzajów kluczy, zdecydowanie sugeruję umieszczenie ich na różnych mapach ze względu na zdrowie psychiczne.

Jeśli to nie pomoże, wyjaśnij pytanie - najlepiej za pomocą kodu, który pokaże, co masz na myśli.

Jon Skeet
źródło
6

Ważną kwestią, na którą należy tutaj zwrócić uwagę, jest to, że jeśli klucz jest obiektem klasy zdefiniowanej przez użytkownika w java, należy nadpisać metodę equals. Ponieważ metoda HashMap.get (klucz obiektu) używa metody equals do dopasowania wartości klucza. Jeśli nie zastąpisz metody equals, spróbuje znaleźć wartość po prostu na podstawie odwołania do klucza, a nie rzeczywistej wartości klucza, w którym to przypadku zawsze zwróci wartość null.

Sreeja Mohan
źródło
gr8 wyjaśnienie mam :)
eLemEnt
3

Załóżmy, że zadeklarowałeś HashMap jako: -

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

Następnie klucz w mapie jest typu Character typ danych i wartość typu int.Teraz, aby uzyskać wartość odpowiadającą kluczowi niezależnie od typu klucza, typu wartości, składnia jest następująca: -

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

Więc zgodnie z twoim pytaniem chcesz otrzymać ciąg znaków odpowiadający kluczowi. W tym celu zadeklaruj HashMap jako HashMap <"typ danych klucza", "typ danych wartości" hs = new HashMap <> (); Użycie tego sprawi, że twój kod będzie czystszy, a także nie będziesz musiał konwertować wyniku hs.get ("my_code") na łańcuch, ponieważ domyślnie zwraca wartość ciągu, jeśli w momencie wejścia zachował wartość jako łańcuch.

Gaurav Sachdeva
źródło
1

Oto kolejny przykład użycia funkcji keySet (), get (), values ​​() i entrySet () w celu uzyskania kluczy i wartości w mapie:

        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());
on ja
źródło
0

Możesz użyć metody get (klucz obiektu) z HashMap. Należy pamiętać, że w wielu przypadkach klasa klucza powinna przesłonić metodę equals, aby była użyteczną klasą dla klucza Map.

raffael
źródło
0
 HashMap<Integer, String> hmap = new HashMap<Integer, String>();
 hmap.put(4, "DD");

Wartość zamapowana na klucz 4toDD

Jabar Shahid
źródło