static ArrayList<String> tableNamesMD = new ArrayList<String>();
static ArrayList<ArrayList<String>> columnNamesMD = new ArrayList<ArrayList<String>>();
填充两个数组后
for(int i = 0; i < tableNamesMD.size(); i++) {
System.out.println(tableNamesMD.get(i));
for(int j = 0; j < tableNamesMD.get(i).size(); j++) {
//do stuff here
}
}
tableNamesMD.get(i).size()
内部for循环出错它说“方法大小()未定义类型String”
答案 0 :(得分:2)
在你的另一个循环中,你遍历tableNamesMD
的所有String
个实例的元素。当您获得i
- String
时,调用size()
会引发编译时错误。
可能你的意思是:
for (int i = 0; i < tableNamesMD.size(); i++) {
System.out.println(tableNamesMD.get(i));
for(int j = 0; j < columnNamesMD.get(i).size(); j++) {
//do stuff here
}
}
答案 1 :(得分:0)
我假设您要迭代所有表,并且对于每个表迭代其列,我也假设表tableNamesMD.get(i)
的列是columnNamesMD.get(i)
,在这种情况下Kostantin的答案会工作的。
但是,我认为设计自然存在缺陷。因为很自然地,我们希望迭代所有表并处理与每个表相关联的一些数据,我们应该以面向对象的方式进行这种关联,即:
public interface Table {
String getName();
List<Column> getColumns();
}
public interface Column {
String getName();
}
然后迭代代码看起来像
List<Table> tables = ...;
for (Table table : tables) {
System.out.println(table.getName());
for (Column column : columns) {
System.out.println(column.getName());
}
}
我们通过列表索引消除了表及其列之间的关联,并用foreach语句替换了for。这两项改变在提高代码的可读性方面都有很长的路要走,这有很多令人满意的副作用。
另请注意,我们可以使用像此
的流API重写此内容tables.forEach(table -> {
System.out.println(table.getName());
table.getColumns().forEach(column -> System.out.println(column.getName()));
});
一般来说,我会说如果某种东西被认为是面向对象编程中的一个实体,那么它应该是一个类。