需要与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个元素。我需要在比较后只显示缺少的帐号。
答案 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)
}
}
}