簡體   English   中英

根據鍵名從 HashMap 獲取字符串值

[英]get string value from HashMap depending on key name

我有一個帶有各種鍵和值的HashMap ,我怎樣才能得到一個值?

我在地圖中有一個名為my_code的鍵,它應該包含一個字符串,我怎樣才能獲得它而不必遍歷地圖?

到目前為止我有..

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

我期待看到一個String ,例如“ABC”或“DEF”,因為這是我最初放入的內容,但是如果我執行System.out.println()我會得到類似java.lang.string#F0454東西java.lang.string#F0454

抱歉,我對地圖不太熟悉,你可能猜到了 ;)

只需使用Map#get(key)

Object value = map.get(myCode);

這是關於地圖的教程,您可能會發現它很有用: http : //java.sun.com/docs/books/tutorial/collections/interfaces/map.html

編輯:您使用以下內容編輯了您的問題:

我期待看到一個字符串,例如“ABC”或“DEF”,因為這是我最初放在那里的內容,但是如果我執行 System.out.println() 我得到類似 java.lang.string# 的東西F0454

抱歉,我對地圖不太熟悉,你可能猜到了 ;)

您正在看到Object#toString() 但是java.lang.String應該已經實現了,除非您創建了一個名稱中帶有小寫s自定義實現: java.lang.string 如果它實際上是一個自定義對象,那么每當您在所需對象上執行System.out.println()toString()時,您都需要覆蓋Object#toString()以獲取“人類可讀的字符串”。 例如:

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

如果您將鍵/值存儲為字符串,那么這將起作用:

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

問題是在 HashMap 中填充了什么(鍵和值)

如果您將使用泛型並將您的地圖定義為

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

然后取值作為

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

您不需要對 map.get() 進行類型轉換或調用 toString 方法來獲取 String 值

恐怕你的問題根本不清楚。 密鑰沒有“名稱”; 就地圖而言,它沒有被“稱為”任何東西——它只是一個鍵,將與其他鍵進行比較。 如果你有很多不同種類的鑰匙,我強烈建議你為了理智起見把它們放在不同的地圖上。

如果這沒有幫助,請澄清問題 - 最好使用一些代碼來顯示您的意思。

map.get(myCode)

這里要注意的一個重要點是,如果您的鍵是 Java 中用戶定義類的對象,那么請使其成為覆蓋 equals 方法的一個點。 因為 HashMap.get(Object key) 方法使用 equals 方法匹配鍵值。 如果您不覆蓋 equals 方法,那么它將嘗試僅根據鍵的引用而不是鍵的實際值來查找值,在這種情況下,它將始終返回空值。

假設您將 HashMap 聲明為:-

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

然后,map中的key是Character數據類型,value是int類型。現在,不管key的類型,value的類型,獲取key對應的值,語法是:-

    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") 的結果轉換為字符串,因為默認情況下,如果在輸入時將值保留為字符串,則它返回字符串的值。

這是如何使用 keySet()、get()、values() 和 entrySet() 函數獲取 Map 中的鍵和值的另一個示例:

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

您可以使用 HashMap 中的 get(Object key) 方法。 請注意,在許多情況下,您的 Key 類應該覆蓋 equals 方法,以成為 Map 鍵的有用類。

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

映射到鍵4的值是DD

HashMap newMap = new HashMap(paramMap);
"type" value = map.get(newMap);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM