dapatkan nilai string dari HashMap tergantung pada nama kunci

123

Saya memiliki HashMapdengan berbagai kunci dan nilai, bagaimana saya bisa mendapatkan satu nilai?

Saya punya kunci di peta bernama my_code , itu harus berisi string, bagaimana saya bisa mendapatkannya tanpa harus mengulang melalui peta?

Sejauh ini saya punya ..

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

Saya mengharapkan untuk melihat String, seperti "ABC" atau "DEF" seperti yang saya taruh di sana pada awalnya, tetapi jika saya melakukanSystem.out.println() saya mendapatkan sesuatu sepertijava.lang.string#F0454

Maaf, saya tidak terlalu paham dengan peta seperti yang mungkin bisa Anda tebak;)

Jimmy
sumber

Jawaban:

166

Gunakan saja Map#get(key)?

Object value = map.get(myCode);

Berikut adalah tutorial tentang peta, Anda mungkin merasa berguna: http://java.sun.com/docs/books/tutorial/collections/interfaces/map.html .

Edit: Anda mengedit pertanyaan Anda dengan yang berikut ini:

Saya mengharapkan untuk melihat String, seperti "ABC" atau "DEF" karena itulah yang saya masukkan pada awalnya, tetapi jika saya melakukan System.out.println () saya mendapatkan sesuatu seperti java.lang.string # F0454

Maaf, saya tidak terlalu paham dengan peta seperti yang mungkin bisa Anda tebak;)

Anda sedang melihat hasil dari Object#toString(). Tapi java.lang.Stringharus sudah memiliki satu dilaksanakan, kecuali Anda membuat kustom implementasi dengan huruf kecil sdalam nama: java.lang.string. Jika ini sebenarnya adalah objek khusus, Anda perlu menimpanya Object#toString()untuk mendapatkan "string yang dapat dibaca manusia" setiap kali Anda melakukan System.out.println()atau toString()pada objek yang diinginkan. Sebagai contoh:

@Override
public String toString() {
    return "This is Object X with a property value " + value;
}
BalusC
sumber
1
Tentu saja, jika Anda membuat kelas string khusus, saya akan merekomendasikan (1) tidak melakukan itu, karena itu mungkin bukan yang ingin Anda lakukan, dan (2) jika Anda akan melakukan itu, JANGAN meletakkannya di namespace java.lang.
MatrixFrog
1
jika HashMap <String, String> newMap = new HashMap <String, String> (); bagaimana cara mendapatkan elemen string dari ini ...? di mana nilai String = newMap.get ("my_code"); memberikan kesalahan
saidesh kilaru
bagaimana Anda bisa membalikkan? mendapatkan kunci dari nilai?
sampaikan
58

Jika Anda menyimpan kunci / nilai sebagai string, ini akan berfungsi:

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

Pertanyaannya adalah apa yang dihuni di HashMap (kunci & nilai)

jeff porter
sumber
jika HashMap <String, String> newMap = new HashMap <String, String> (); bagaimana cara mendapatkan elemen string dari ini ...? di mana nilai String = newMap.get ("my_code"); memberikan kesalahan
saidesh kilaru
11

Jika Anda akan menggunakan Generik dan mendefinisikan peta Anda sebagai

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

lalu mengambil nilai sebagai

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

Anda tidak akan diminta untuk mengetikkan map.get () atau memanggil metode toString untuk mendapatkan nilai String

Shirishkumar Bari
sumber
9

Saya khawatir pertanyaan Anda sama sekali tidak jelas. Kunci tidak memiliki "nama"; itu tidak "disebut" apa pun sejauh menyangkut peta - itu hanya kunci, dan akan dibandingkan dengan kunci lain. Jika Anda memiliki banyak jenis kunci, saya sangat menyarankan Anda meletakkannya di peta yang berbeda demi kewarasan.

Jika ini tidak membantu, harap klarifikasi pertanyaan - sebaiknya dengan beberapa kode untuk menunjukkan apa yang Anda maksud.

Jon Skeet
sumber
7

map.get(myCode)

abyx
sumber
6

Poin penting untuk dicatat di sini adalah bahwa jika kunci Anda adalah objek dari kelas yang ditentukan pengguna di java, maka jadikan itu titik untuk mengganti metode sama dengan. Karena metode HashMap.get (Object key) menggunakan metode sama dengan untuk mencocokkan nilai kunci. Jika Anda tidak menimpa metode sama dengan maka metode tersebut akan mencoba menemukan nilai hanya berdasarkan referensi kunci dan bukan nilai kunci sebenarnya yang dalam hal ini akan selalu mengembalikan nol.

Sreeja Mohan
sumber
gr8 penjelasan mam :)
eLemEnt
3

Misalkan Anda menyatakan HashMap sebagai: -

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

Kemudian, kunci dalam peta adalah tipe tipe data karakter dan nilai tipe int. Sekarang, untuk mendapatkan nilai yang sesuai dengan kunci terlepas dari jenis kunci, tipe nilai, sintaksnya adalah: -

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

Jadi, menurut pertanyaan Anda, Anda ingin mendapatkan nilai string yang sesuai dengan kunci. Untuk ini, cukup deklarasikan HashMap sebagai HashMap <"datatype of key", "datatype of value" hs = new HashMap <> (); Menggunakan ini akan membuat kode Anda lebih bersih dan juga Anda tidak perlu mengubah hasil hs.get ("my_code") menjadi string karena secara default mengembalikan nilai string jika pada saat masuk seseorang menyimpan nilai sebagai string.

Gaurav Sachdeva
sumber
1

Ini adalah contoh lain tentang cara menggunakan fungsi keySet (), get (), values ​​() dan entrySet () untuk mendapatkan Kunci dan Nilai dalam Peta:

        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
sumber
0

Anda dapat menggunakan metode get (Object key) dari HashMap. Sadarilah bahwa dalam banyak kasus, Kelas Kunci Anda harus mengganti metode sama dengan, untuk menjadi kelas yang berguna untuk kunci Peta.

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

Nilai yang dipetakan ke Kunci 4adalahDD

Jabar Shahid
sumber