Java比较hashmap与arraylist的比较值

时间:2015-06-24 22:00:38

标签: java arraylist iterator hashmap

我真的很喜欢这个问题。我不确定这种逻辑是否可行,还有其他什么可以实现我想要的吗?

我正在创建一个像这样的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);

所以输出将是这样的:

  

{one = [valid1,valid2],two = [valid3,valid4]}

但我在做什么,我正在阅读一个文件并将其与hashmap进行比较

代码:

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的值有效。

提前谢谢!

3 个答案:

答案 0 :(得分:0)

如果要获取令牌的有效密钥,实现目标的最昂贵的方法是迭代哈希键,而不是迭代该键的数组值,并检查其中的任何字符串是否与条件匹配。 / p>

看起来应该是这样的:

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;
}

答案 1 :(得分:0)

将地图转换为列表

List<String> list = new ArrayList<String>(map.values());

然后使用

list.contains(token[1])

检查它是否等于列表内容,即hashmap的值

答案 2 :(得分:0)

ArrayList<String> check;
check = your_hash_map.get(token[1]);
if(check != null){System.out.println("Valid");}