迭代哈希映射

时间:2010-03-01 03:38:57

标签: java string hashmap

我有一个声明为的hashmap private HashMap testMessages = null;

我将把字符串值存储在从oracle表中检索到的hashmap的key和value部分。

我不关心hashmap键。我想单独检索hashmap值并检查字符串变量filename是否以哈希映射值之一为前缀,如果相同,则返回true。我想确保哈希映射值不为空且为空。

函数(字符串文件名) {..

循环遍历hashmap值

检查变量文件名是否以其中一个hashmap值为前缀(如果是)  返回true  除此以外  返回false  }

hashmap示例:  KEY1,PROD  KEY2,测试  KEY3,假
文件名示例:          test123_20012010.csv

应该返回true,因为文件名的前缀是其中一个hashmap值

我该怎么做?

4 个答案:

答案 0 :(得分:5)

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

应该注意,这是最坏情况下地图中条目数的线性时间。如果你想要检查多个filename,那么预处理前缀并构建类似patricia trie和其他快速字典类数据结构的东西要好得多。

答案 1 :(得分: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
  }
}

答案 2 :(得分: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,然后您可以单独阅读

答案 3 :(得分:0)

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