รับค่าสตริงจาก HashMap ขึ้นอยู่กับชื่อคีย์


123

ฉันมีHashMapคีย์และค่าต่างๆฉันจะเอาค่าหนึ่งออกมาได้อย่างไร

ฉันมีคีย์ในแผนที่ที่เรียกว่าmy_codeมันควรมีสตริงฉันจะรับมันได้อย่างไรโดยไม่ต้องวนซ้ำผ่านแผนที่

จนถึงตอนนี้ฉันมี ..

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

ฉันคาดหวังว่าจะเห็น a Stringเช่น "ABC" หรือ "DEF" ซึ่งเป็นสิ่งที่ฉันใส่ไว้ในตอนแรก แต่ถ้าฉันทำSystem.out.println()ฉันจะได้รับสิ่งที่ชอบjava.lang.string#F0454

ขอโทษค่ะฉันไม่ค่อยคุ้นเคยกับแผนที่เท่าที่คุณจะเดาได้;)

คำตอบ:


166

แค่ใช้Map#get(key)?

Object value = map.get(myCode);

นี่คือการสอนเกี่ยวกับแผนที่คุณอาจพบว่ามีประโยชน์: http://java.sun.com/docs/books/tutorial/collections/interfaces/map.html

แก้ไข:คุณแก้ไขคำถามของคุณโดยมีสิ่งต่อไปนี้:

ฉันคาดหวังว่าจะเห็น String เช่น "ABC" หรือ "DEF" ซึ่งเป็นสิ่งที่ฉันใส่ไว้ในตอนแรก แต่ถ้าฉันทำ System.out.println () ฉันจะได้รับสิ่งที่คล้ายกับ java.lang.string # F0454

ขอโทษค่ะฉันไม่ค่อยคุ้นเคยกับแผนที่เท่าที่คุณจะเดาได้;)

Object#toString()คุณเห็นผลของการ แต่java.lang.Stringแล้วควรจะมีการดำเนินการอย่างใดอย่างหนึ่งถ้าคุณสร้างที่กำหนดเองการดำเนินการด้วยตัวพิมพ์เล็กในชื่อ:s java.lang.stringหากเป็นออบเจ็กต์ที่กำหนดเองจริงคุณจะต้องแทนที่Object#toString()เพื่อให้ได้ "สตริงที่มนุษย์อ่านได้" เมื่อใดก็ตามที่คุณทำSystem.out.println()หรือtoString()บนวัตถุที่ต้องการ ตัวอย่างเช่น:

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

1
แน่นอนว่าหากคุณกำลังสร้างคลาสสตริงที่กำหนดเองฉันขอแนะนำให้ (1) ไม่ทำเช่นนั้นเนื่องจากอาจไม่ใช่สิ่งที่คุณต้องการทำและ (2) หากคุณกำลังจะทำอย่าใส่ไว้ใน java.lang เนมสเปซ
MatrixFrog

1
ถ้า HashMap <String, String> newMap = HashMap ใหม่ <String, String> (); วิธีรับองค์ประกอบสตริงจากสิ่งนี้ ... ? โดยที่ค่า String = newMap.get ("my_code"); ให้ข้อผิดพลาด
saidesh kilaru

คุณจะผกผันได้อย่างไร? รับกุญแจจากค่า?
ส่งมอบ

58

หากคุณจัดเก็บคีย์ / ค่าเป็นสตริงสิ่งนี้จะใช้ได้:

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

คำถามคือสิ่งที่ได้รับการเติมข้อมูลใน HashMap (คีย์และค่า)


ถ้า HashMap <String, String> newMap = HashMap ใหม่ <String, String> (); วิธีรับองค์ประกอบสตริงจากสิ่งนี้ ... ? โดยที่ค่า String = newMap.get ("my_code"); ให้ข้อผิดพลาด
saidesh kilaru

11

หากคุณจะใช้ Generics และกำหนดแผนที่ของคุณเป็น

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

จากนั้นดึงค่าเป็น

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

คุณไม่จำเป็นต้องพิมพ์ map.get () หรือเรียกเมธอด toString เพื่อรับค่า String


9

คำถามของคุณไม่ชัดเจนเลยฉันกลัว คีย์ไม่มี "ชื่อ"; มันไม่ได้ "เรียก" อะไรเท่าที่แผนที่เกี่ยวข้อง แต่เป็นเพียงกุญแจสำคัญและจะนำไปเปรียบเทียบกับคีย์อื่น ๆ หากคุณมีกุญแจประเภทต่างๆมากมายฉันขอแนะนำให้คุณใส่ไว้ในแผนที่ต่างๆเพื่อความมีสติ

หากวิธีนี้ไม่ได้ผลโปรดชี้แจงคำถาม - ควรใช้รหัสบางส่วนเพื่อแสดงความหมายของคุณ



6

จุดสำคัญที่ต้องสังเกตคือถ้าคีย์ของคุณเป็นอ็อบเจ็กต์ของคลาสที่ผู้ใช้กำหนดเองใน java ให้กำหนดจุดนี้เพื่อแทนที่เมธอด equals เนื่องจากเมธอด HashMap.get (Object key) ใช้เมธอด equals สำหรับการจับคู่ค่าคีย์ หากคุณไม่ได้แทนที่เมธอด equals มันจะพยายามหาค่าตามการอ้างอิงของคีย์ไม่ใช่ค่าจริงของคีย์ซึ่งในกรณีนี้จะส่งคืนค่าว่างเสมอ


gr8 คำอธิบายแม่ :)
eLemEnt

3

สมมติว่าคุณประกาศ HashMap เป็น: -

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

จากนั้นคีย์ในแผนที่เป็นประเภทประเภทข้อมูลอักขระและค่าของประเภท int ตอนนี้เพื่อให้ได้ค่าที่สอดคล้องกับคีย์โดยไม่คำนึงถึงประเภทของคีย์ประเภทค่าไวยากรณ์คือ: -

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

ดังนั้นตามคำถามของคุณคุณต้องการรับค่าสตริงที่ตรงกับคีย์สำหรับสิ่งนี้เพียงแค่ประกาศ HashMap เป็น HashMap <"datatype of key", "datatype of value" hs = new HashMap <> (); การใช้สิ่งนี้จะทำให้โค้ดของคุณสะอาดขึ้นและคุณไม่จำเป็นต้องแปลงผลลัพธ์ของ hs.get ("my_code") เป็นสตริงเนื่องจากโดยค่าเริ่มต้นจะส่งคืนค่าของสตริงหากในขณะเข้าใช้งานมีการเก็บค่าไว้เป็นสตริง


1

นี่เป็นอีกตัวอย่างหนึ่งของวิธีใช้ฟังก์ชัน keySet (), get (), values ​​() และ entrySet () เพื่อรับ Keys and Values ​​ในแผนที่:

        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

คุณสามารถใช้เมธอด get (Object key) จาก HashMap โปรดทราบว่าในหลาย ๆ กรณีระดับคีย์ของคุณควรแทนที่วิธีการเท่ากับเพื่อให้เป็นคลาสที่มีประโยชน์สำหรับคีย์แผนที่


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.