Java 如何比较需要不同类型迭代循环的不同集合中的值?

Java 如何比较需要不同类型迭代循环的不同集合中的值?,java,arraylist,iterator,Java,Arraylist,Iterator,假设您有一个迭代器,它将包含需要与位于单独列表中的值进行比较的值 Iterator<Map.Entry<String, Object>> it = aObj.items(); while (it.hasNext()) { Map.Entry<String, Object> item = it.next(); nameValue = item.getNameValue(); keyValue = item.getKeyValue();

假设您有一个迭代器,它将包含需要与位于单独列表中的值进行比较的值

Iterator<Map.Entry<String, Object>> it = aObj.items();

while (it.hasNext()) {
    Map.Entry<String, Object> item = it.next();
    nameValue = item.getNameValue();
    keyValue = item.getKeyValue();
    System.out.println("Name: " + nameValue);
    System.out.println("Value: " + keyValue);
}
假设您有一个单独的列表(您想在其中比较上述值):

因为这些是不同类型的循环(一个是while循环,另一个是for each循环) 您如何比较,例如:

if (nameValue.equals(itemNameValue())) {
    // do something?
}
我需要同时迭代两个集合/数据结构

这就是解决办法吗

String nameValue = "";
Object keyValue = "";
String itemNameValue = "";
String itemKeyValue = "";

Iterator<Map.Entry<String, Object>> it = aObj.items();

while (it.hasNext()) {
    Map.Entry<String, Object> item = it.next();
    nameValue = item.getNameValue();
    keyValue = item.getKeyValue();
    for (Item item : items) {
        itemNameValue = item.getName();
        itemKeyValue = item.getKey();
    }
    if (nameValue.equals(itemNameValue())) {
        // do something?
    }
}
字符串名称值=”;
对象键值=”;
字符串itemNameValue=“”;
字符串itemKeyValue=“”;
迭代器it=aObj.items();
while(it.hasNext()){
Map.Entry item=it.next();
nameValue=item.getNameValue();
keyValue=item.getKeyValue();
用于(项目:项目){
itemNameValue=item.getName();
itemKeyValue=item.getKey();
}
if(nameValue.equals(itemNameValue())){
//做点什么?
}
}
基本上,我想问的是(以一种非常简单的方式):

(1) 需要在while循环中迭代的集合只是测试输入(示例数据)

(2) 第二个集合中的数组列表实际上是从数据库调用(DAO)返回并放入ArrayList的数据列表

我试图验证while循环中迭代器的输入是否与ArrayList(来自数据库)的值相同。因为这些是不同的数据结构,需要不同的循环机制。我如何能够同时遍历这两个数据结构并比较它们?第二个数据结构(数组列表)是正确的实际值集

我不知道如果我使用嵌套循环,是否可以保证每次迭代都会比较相同的项


感谢您花时间阅读此…

您面临的问题是应用程序设计不好的直接结果。 这个问题的下划线错误的假设是地图和列表将以相同的顺序保存对象

  • 列表-->按未排序顺序排序的数据结构
  • 映射-->既不排序也不排序的数据结构
这并不是说这两种数据结构不能很好地协同工作。然而,使用它们来存储相同的列表只会导致程序设计的笨拙

即使要回答您的问题,您也可以使用以下代码来完成此操作:

Iterator<Map.Entry<String, Object>> it = aObj.items();
List<Items> items = dbCall.getItems(); // Get the list of Items from the DB
int index = 0;
while (it.hasNext()) {
    Map.Entry<String, Object> itemFromMap = it.next();
    Item itemFromList = items.get(index);
    if(itemFromMap.getNameValue().equals(itemFromList.getName()) && 
            itemFromMap.getKeyValue().equals(itemFromList.getKey())){
        // If you prefer a single .equals() method over &&, then you can implement a Comparator<Item>
        return false;
    }
    index++;
}
return true;
Iterator it=aObj.items();
List items=dbCall.getItems();//从数据库中获取项目列表
int指数=0;
while(it.hasNext()){
Map.Entry itemFromMap=it.next();
ItemItemFromList=items.get(索引);
if(itemFromMap.getNameValue().equals(itemFromList.getName())&&
itemFromMap.getKeyValue()等于(itemFromList.getKey()){
//如果您喜欢单个.equals()方法而不是&,那么可以实现一个比较器
返回false;
}
索引++;
}
返回true;

你到底想做什么?你说你想同时在两个集合上循环,但你写的是一个嵌套循环。此外,嵌套循环毫无意义。请准确描述你想做什么。嗨,鲍里斯。。。我试图比较属于两种不同数据结构的值。这些数据结构使用不同的方式进行迭代。迭代器1是一个示例数据。第二个ArrayList是采样数据必须相等的实际数据。你明白我想解决什么吗?不,我不明白。1) 提供样本数据。2) 提供预期输出。3) 充分解释处理过程是什么。但最重要的是,用相关信息更新你的问题。。。非常感谢你。这是我的错,它是一个糟糕的应用程序设计。我确实通过一个DAO创建了一个DB调用,它返回了一个项目列表,但是映射实际上是使用Jackson API获取Jackson Json键/值对的唯一方法。看到我的其他帖子了吗?鉴于此,您将如何设计这一更好的设计?我已经在相应的页面上回答了这个问题。您需要使用诸如GSON或JACKSON之类的JSON库将JSON字符串解析为对象或对象列表(在您的情况下,这些将是项目)
if (nameValue.equals(itemNameValue())) {
    // do something?
}
String nameValue = "";
Object keyValue = "";
String itemNameValue = "";
String itemKeyValue = "";

Iterator<Map.Entry<String, Object>> it = aObj.items();

while (it.hasNext()) {
    Map.Entry<String, Object> item = it.next();
    nameValue = item.getNameValue();
    keyValue = item.getKeyValue();
    for (Item item : items) {
        itemNameValue = item.getName();
        itemKeyValue = item.getKey();
    }
    if (nameValue.equals(itemNameValue())) {
        // do something?
    }
}
Iterator<Map.Entry<String, Object>> it = aObj.items();
List<Items> items = dbCall.getItems(); // Get the list of Items from the DB
int index = 0;
while (it.hasNext()) {
    Map.Entry<String, Object> itemFromMap = it.next();
    Item itemFromList = items.get(index);
    if(itemFromMap.getNameValue().equals(itemFromList.getName()) && 
            itemFromMap.getKeyValue().equals(itemFromList.getKey())){
        // If you prefer a single .equals() method over &&, then you can implement a Comparator<Item>
        return false;
    }
    index++;
}
return true;