我有一个声明为的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值
我该怎么做?
答案 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)
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;
}