在Java中迭代Map

时间:2017-01-26 23:59:20

标签: java

需要与List进行比较的条目,并从Map中获取不存在的值。

    for (Map.Entry<String, Object> entry : itemObj.entrySet())
    {
        System.out.println(entry.getKey());
        for (ItemProcessVO processVO : itemDetails2){
            if (entry.getKey().equalsIgnoreCase(processVO.getAccount())){
                String account = processVO.getAccount();
                lstAccVO.add(account);
            }
        }

    }

这是我使用的代码。我有entry.getKey()的Map有6个值而itemDetail2只有5个元素。我需要在比较后只显示缺少的帐号。

3 个答案:

答案 0 :(得分:0)

下面的代码应该可以解决问题。它使用不区分大小写的比较并最终打印剩余的键,更多解释在注释中:

public static void main(String[] args) throws IOException {
    Map<String, Object> itemObj = new HashMap<>(); //Your Map
    List<ItemProcessVO> itemDetails2 = new ArrayList<>();// Your list

    //First, get all the keys of the map
    Set<String> keys = new HashSet<>(itemObj.keySet());

    //Now, iterate through list and remove the matching items
    for(ItemProcessVO processVO : itemDetails2){
        String key = pop(keys, processVO.getAccount());
        //If key is not null then remove it
        if(null != key){
            keys.remove(key);
        }
    }

    //Now, iterate through remaining keys and print the values
    for(String key : keys){
        System.out.println("Missing value " + itemObj.get(key));
    }
}

private static String pop(Set<String> set, String key){
    if(null == set){
        return null;
    }else{
        for(String element : set){
            if(element.equalsIgnoreCase(key)){
                return element;
            }
        }
    }
}

答案 1 :(得分:0)

只需在您的if子句中添加else - 语句,该子句将该帐户存储在本地变量中。然后在你的for循环之后,你可以做任何事情。

提示:您可以使用Map#keySet()上的循环代替Map#entrySet(),并绕过那些条目。

答案 2 :(得分:0)

在提供的示例中,您将密钥与帐户进行了比较,只需使用else语句查找在此循环之后迭代的missingAccounts。

List<ItemProcessVO> missingAccounts= new ArrayList<>();
for (Map.Entry<String, Object> entry : itemObj.entrySet())
{
    System.out.println(entry.getKey());
    for (ItemProcessVO processVO : itemDetails2){
        if (entry.getKey().equalsIgnoreCase(processVO.getAccount())){
            String account = processVO.getAccount();
            lstAccVO.add(account);
        }else{
            missingAccounts.add(account)
        }
    }
}