Anahtar adına bağlı olarak HashMap'ten dize değeri alın


123

HashMapÇeşitli anahtar ve değerlere sahip bir var , bir değeri nasıl çıkarabilirim?

Haritada adında bir anahtarım var my_code, bir dize içermeli, haritada yinelemeye gerek kalmadan bunu nasıl elde edebilirim?

Şimdiye kadar var ..

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

String"ABC" veya "DEF" gibi bir görmeyi bekliyorum çünkü başlangıçta oraya koyduğum şey buydu, ancak yaparsam System.out.println()şunun gibi bir şey elde ederimjava.lang.string#F0454

Üzgünüm, tahmin edebileceğiniz gibi haritalara pek aşina değilim;)

Yanıtlar:


166

Sadece kullan Map#get(key)?

Object value = map.get(myCode);

İşte haritalar hakkında bir eğitim, yararlı bulabilirsiniz: http://java.sun.com/docs/books/tutorial/collections/interfaces/map.html .

Düzenleme: Sorunuzu aşağıdakilerle düzenlediniz:

Başlangıçta oraya koyduğum için "ABC" veya "DEF" gibi bir String görmeyi bekliyorum, ancak bir System.out.println () yaparsam java.lang.string gibi bir şey elde ederim # F0454

Üzgünüm, tahmin edebileceğiniz gibi haritalara pek aşina değilim;)

Sonucunu görüyorsunuz Object#toString(). Ama java.lang.Stringsen oluşturulan sürece zaten biri uygulamış olmaları gerekmektedir özel bir küçük harf ile uygulanmasını sadına: java.lang.string. Aslında özel bir nesneyse, istediğiniz nesneyi Object#toString()her yaptığınızda System.out.println()veya toString()üzerinde "insan tarafından okunabilir bir dize" elde etmek için geçersiz kılmanız gerekir . Örneğin:

@Override
public String toString() {
    return "This is Object X with a property value " + value;
}

1
Elbette, eğer özel bir dizge sınıfı oluşturuyorsanız, (1) muhtemelen yapmak istediğiniz şey olmadığı için bunu yapmamayı tavsiye ederim ve (2) eğer bunu yapacaksanız, java.lang ad alanı.
MatrixFrog 01

1
HashMap <String, String> newMap = new HashMap <String, String> (); bundan string elemanı nasıl elde edilir ...? burada Dize değeri = newMap.get ("kodum"); hata veriyor
saidesh kilaru

nasıl tersine çevirebilirsin? değerden anahtar almak?
2015'i 13

58

Anahtarları / değerleri dizeler olarak depoluyorsanız, bu işe yarayacaktır:

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

Soru, HashMap'te neyin doldurulacağıdır (anahtar ve değer)


HashMap <String, String> newMap = new HashMap <String, String> (); bundan string elemanı nasıl elde edilir ...? burada Dize değeri = newMap.get ("kodum"); hata veriyor
saidesh kilaru

11

Generics kullanacak ve haritanızı şu şekilde tanımlayacaksanız

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

sonra değeri şu şekilde alınıyor

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

String değerini almak için map.get () yazmanız veya toString yöntemini çağırmanız gerekmeyecek


9

Sorunuz hiç net değil, korkarım. Bir anahtarın "adı" yoktur; harita söz konusu olduğunda hiçbir şey "çağrılmıyor" - sadece bir anahtar ve diğer anahtarlarla karşılaştırılacak. Çok sayıda farklı anahtarınız varsa, akıl sağlığınız için onları farklı haritalara koymanızı şiddetle tavsiye ederim.

Bu işe yaramazsa, lütfen soruyu netleştirin - tercihen ne demek istediğinizi göstermek için bir kod kullanarak.



6

Burada dikkat edilmesi gereken önemli bir nokta, anahtarınız java'da kullanıcı tanımlı sınıfın bir nesnesiyse, eşittir yöntemini geçersiz kılmak için bir noktaya getirmenizdir. HashMap.get (Object key) yöntemi, anahtar değerini eşleştirmek için eşittir yöntemini kullandığından. Eşittir yöntemini geçersiz kılmazsanız, değeri anahtarın gerçek değerine göre değil, yalnızca anahtarın referansına göre bulmaya çalışır; bu durumda her zaman bir boş döndürür.


gr8 açıklama mam :)
eLemEnt

3

HashMap'i şu şekilde ilan ettiğinizi varsayalım: -

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

Ardından, eşleme anahtarı türündedir Karakter veri türü ve int türünün değeri.Şimdi, anahtar türü, değer türü, sözdizimi ne olursa olsun anahtara karşılık gelen değeri almak için: -

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

Yani, sorunuza göre bir anahtara karşılık gelen dize değerini almak istiyorsunuz. Bunun için, HashMap'i HashMap <"anahtarın veri türü", "değerin veri türü" hs = new HashMap <> (); Bunu kullanmak kodunuzu daha temiz hale getirir ve ayrıca hs.get ("my_code") sonucunu dizeye dönüştürmenize gerek kalmaz, çünkü varsayılan olarak giriş zamanında bir dizge olarak değer tutulmuşsa dize değerini döndürür.


1

Bu, bir Haritadaki Anahtarları ve Değerleri elde etmek için keySet (), get (), values ​​() ve entrySet () işlevlerinin nasıl kullanılacağına ilişkin başka bir örnektir:

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

0

HashMap'ten get (Object key) yöntemini kullanabilirsiniz. Pek çok durumda Anahtar Sınıfınızın, bir Map anahtarı için yararlı bir sınıf olması için eşittir yöntemini geçersiz kılması gerektiğini unutmayın.


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

Anahtar 4ile eşlenen DeğerDD

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.