我真的被这个问题卡住了。我不确定这个逻辑是否可行,还有其他什么可以实现我想要的吗?
我正在创建这样一个HashMap。
List<String> data1 = new ArrayList();
data1.add("valid1");
data1.add("valid2");
List<String> data2 = new ArrayList();
data2.add("valid3");
data2.add("valid4");
Map<String,ArrayList> hashList = new HashMap();
hashList.put("one",data1);
hashList.put("two",data2);
因此输出如下:
{一个=[valid1,valid2],两个=[valid3,valid4]}
但我要做的是,我正在阅读一个文件,并将其与哈希图进行比较
代码:
String line;
String[] token;
try {
LineIterator it = FileUtils.lineIterator(file,"UTF-8");
while(it.hasNext()){
line = it.nextLine();
token = StringUtils.split(line,(","));
if(token[1].equalsIgnoreCase( //check if its equal to the value of the hashmap){
System.out.println("Valid");
}
}
}
我的文件看起来是这样的:
test1,valid1,check1
test2,valid3,check2
所以我想做的是,检查"token[1]"是否对hashmap的值有效。
提前谢谢!
将地图转换为列表
List<String> list = new ArrayList<String>(map.values());
然后使用
list.contains(token[1])
检查它是否等于列表内容,该列表内容是哈希映射的值
ArrayList<String> check;
check = your_hash_map.get(token[1]);
if(check != null){System.out.println("Valid");}
如果您想获得令牌的有效密钥,实现目标最昂贵的方法是迭代哈希密钥,而不是迭代该密钥的数组值,并检查其中是否有任何字符串与您的条件匹配。
它应该是这样的:
String getValidKey(String token, Map<String, List<String>> hashList) {
for (String key: hashList.keySet()) {
for (String valid: hashList.get(key)) {
if (valid.equalsIgnoreCase(token)) {
return key;
}
}
}
return null;
}
如果你只需要知道令牌是否有效,这就足够了:
boolean isValid(String token, Map<String, List<String>> hashList) {
for (List<String> list: hashList.values()) {
for (String valid: list) {
if (valid.equalsIgnoreCase(token)) {
return true;
}
}
}
return false;
}