2010-03-01 85 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