假设您有一个Iterator,它将包含您需要与位于单独List中的值进行比较的值。
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);
}
输出:
Name: header
Value: 22222
假设您有一个单独的列表(您要在其中比较上述值):
List<Items> items = new ArrayList<>();
for (Item item : items) {
itemNameValue = item.getName();
itemKeyValue = item.getKey();
System.out.println("Name: " + itemNameValue);
System.out.println("Value: " + itemKeyValue);
}
输出:
Name: header
Value: 44444
因为这些是不同类型的循环(一个是while循环,另一个循环是a) 你如何比较,例如:
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?
}
}
基本上,我想问的是(以非常简单的方式):
(1)需要在while循环中迭代的集合只是测试输入(样本数据)
(2)第二个集合中的数组列表实际上是从数据库调用(DAO)返回并放入ArrayList的数据列表。
我正在尝试验证while循环中Iterator的输入是否与ArrayList(来自数据库)中的值相同。由于这些是需要不同循环机制的不同数据结构。我怎么能同时迭代这两个数据结构并进行比较呢?第二个数据结构(数组列表)是正确的实际值集。
我不知道如果我使用嵌套循环,是否保证每次迭代都会比较相同的项目?
感谢您抽出宝贵时间阅读此内容......
答案 0 :(得分:1)
您遇到的问题是BAD应用程序设计的直接结果。 此问题的下划线不正确假设是地图和列表将以相同的顺序保存对象。
这并不是说这两种数据结构不能很好地协同工作。但是,使用它们存储相同的列表只应该是一个笨拙的程序设计。
即使回答您的问题,您也可以使用以下代码来完成此任务:
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;