2010-03-01 286 views
0

我有一個散列表聲明爲 私有HashMap testMessages = null;迭代哈希映射

我將在從oracle表中檢索到的hashmap的key和value部分中存儲字符串值。

我不關心hashmap鍵。我想單獨檢索hashmap值並檢查字符串變量filename是否以哈希映射值之一作爲前綴,如果相同則返回true。我想確保哈希映射值不爲空且爲空。

功能(字符串文件名) {..

環通的HashMap值

檢查變量文件名是否若然 還真 否則 返回假 前綴HashMap中值之一}

散列映射例如: KEY1,督促 KEY2,測試 KEY3,虛設
文件名的例子:從文件名與HashMap中的一個前綴 test123_20012010.csv

應該返回真值

我該怎麼辦呢?

回答

2

下面是一個蠻力方法來迭代哈希映射值並檢查文件名是否以該值開始。

// generics version 
private HashMap<String, String> testMessages = buildMap(); 

for (String v : testMessages.values()) { 
    if (filename.startsWith(v) { 
    // found a map value that starts the file name 
    } 
} 

// alternative non-generics version 
private HashMap testMessages; // assigned somewhere 

for (Object v : testMessages.values()) { 
    if (filename.startsWith((String) v) { 
    // found a map value that starts the file name 
    } 
} 
+0

我不想使用構建圖 我得到編譯錯誤TestHash.java:20:找到不兼容的類型:java.lang.Object required:java.lang.String for(String prefix:hMap.values ()){注意:TestHash.java使用未經檢查或不安全的操作。注意:使用-Xlint重新編譯:取消選中以獲取詳細信息。 1錯誤 – Arav

+0

用您用來構建testMessages HashMap的任何方法替換buildMap()。我的例子使用泛型,所以你不必將你從HashMap中取出的Object實例轉換爲String。 – marklai

+0

使用非泛型示例更新了答案 – marklai

0

leepoint.net

public static void iterate_over_hashmap(Map mp) { 
    Iterator it = mp.entrySet().iterator(); 
    while (it.hasNext()) { 
     Map.Entry pairs = (Map.Entry)it.next(); 
     System.out.println(pairs.getKey() + " = " + pairs.getValue()); 
    } 
} 

內吸取你必須把每個條目的鍵/值對,並遍歷這些作爲一個單一的實體。然後你丟在Map.Entry的,然後你可以閱讀這兩個分別

+0

這是一個HashMap的HashMap私人我可以把它傳遞給一個地圖? private HashMap testMessages = null; 我可以調用iterate_over_hash(testMessage)嗎? 另外如何檢查變量文件名是否以hashmap值之一作爲前綴如果是這樣,則返回true否則返回false – Arav

+0

他說他不關心密鑰。 – polygenelubricants

5
for (String prefix : map.values()) { 
    if (filename.startsWith(prefix)) { 
     return true; 
    } 
} 
return false; 

應當指出的是,這是項在最壞的情況下,地圖的數量線性時間。如果您有多個filename需要檢查,那麼預處理前綴並構建類似patricia trie和其他類似快速字典的數據結構會更好。

+0

我收到編譯錯誤 TestHash.java:20:不兼容的類型 發現:java.lang.Object中 要求:java.lang.String中 爲(字符串前綴:hMap.values()){ 注:TestHash.java使用未經檢查或不安全的操作。 注意:使用-Xlint重新編譯:取消選中以獲取詳細信息。 1錯誤 – Arav

+0

你是怎麼聲明'hMap'的?它只是'HashMap hMap'?密鑰的類型是什麼?會像'HashMap hMap'工作嗎? – polygenelubricants

+0

HashMap hMap = null; hMap = new HashMap ();hMap.put(「1」,「One」); hMap.put(「2」,「Two」); hMap.put(「3」,「Three」); 的javac TestHash.java TestHash.java:26:不兼容的類型 發現:java.lang.Object中 需要:java.lang.String中 爲(字符串前綴:hMap.values()){ ^ 1錯誤 – Arav

0
function(String fileName) 
{ 
    for(String value : hashMap.values()) 
    { 
     if(fileName.startsWith(value)) 
      return true; 
    } 
    return false; 
} 
+0

@polygenelubricants我應該花更多時間仔細閱讀該問題。 –

+0

非常感謝您的信息 – Arav