我有两个数组列表,其中包含不同数量的项目。 第一次迭代运行良好,但是当它继续下一步时,没有任何事情发生,我怀疑是因为第二个迭代器没有下一个。无论如何重置它?
Iterator<Integer> itID = ID.iterator();
Iterator<String> itTable = Table.iterator();
Iterator<String> itColumn = Column.iterator();
while(itID.hasNext()){
int i = itID.next();
System.out.println(i);
while(itTable.hasNext()){
String SQL = "select " + itColumn.next() + " from " + itTable.next() + " where id=" + i;
System.out.println(SQL);
}
}
答案 0 :(得分:3)
我认为问题是你必须在第一个周期内移动迭代器itTable
和itColumn
的实例化。
Iterator<Integer> itID = ID.iterator();
while (itID.hasNext()) {
// Every time you ask for an iterator, you obtain a new one.
Iterator<String> itTable = Table.iterator();
Iterator<String> itColumn = Column.iterator();
int i = itID.next();
System.out.println(i);
while(itTable.hasNext()){
String SQL = "select " + itColumn.next() + " from " + itTable.next() + " where id=" + i;
System.out.println(SQL);
}
}
这是&#34;重置&#34;的最佳方式迭代器是向聚合器请求迭代器本身的新实例。
答案 1 :(得分:0)
嵌套循环中使用的迭代器应该在第一个循环内部初始化,以便每次外循环迭代时都会重置它们。
但你可以(而且应该)只使用for循环来遍历ArrayList
:
for (int i = 0; i < myList.size(); i++) {
// use myList.get(i)
}
或者只是
for (String s : myList) { // Change string to whatever type your list is holding
// use 's'
}
第二个循环称为for each
循环。它专为迭代列表和数组而设计。为了你的目的,这个将无法工作,因为你正在迭代2个列表,但我认为无论如何我都会提出它。你应该使用第一个for循环。
答案 2 :(得分:0)
稍微超出了问题的范围,但这是我的想法。 迭代两个你认为大小相同的列表,就是在寻找麻烦。如果这两个值应该耦合在一起,那么......将它们耦合在一起。以下课程可以做到这一点:
class SQLField
{
private String tableName;
private String columnName;
public SQLField(String tableName, String columnName) {
this.tableName = tableName;
this.columnName = columnName;
}
public getSelect() {
return "select " + this.columnName + " from " + this.tableName
}
}
这使得使用代码:
Iterator<Integer> itID = ID.iterator();
while (itID.hasNext()) {
// Every time you ask for an iterator, you obtain a new one.
Iterator<SQLField> fields = SQLFields.iterator();
int i = itID.next();
System.out.println(i);
for(SQLField field : fields) {
String SQL = field.getSelect() + " where id = " + i;
System.out.println(SQL);
}
}
在我看来,这是一种更好的方法。