2016-05-31 3 views
-1
static ArrayList<String> tableNamesMD = new ArrayList<String>(); 
static ArrayList<ArrayList<String>> columnNamesMD = new ArrayList<ArrayList<String>>(); 

После того, как оба массива заселенныхJava получить размер внутреннего ArrayList

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 
     } 
} 

Существует ошибка с внутренней цикл в (I) .size tableNamesMD.get()

Это «Метод size() не определен для типа String«

+0

Используйте 'columnNamesMD.get (i)' вместо 'tableNamesMD.get (i)'. –

+0

Вы должны, вероятно, перебирать вложенные ArrayList - columnNamesMD. tableNamesMD не вложен – Eran

+0

Ваш tableNamesMD является arraylist строк, поэтому, если вы используете get (i) .size(), вы пытаетесь получить размер строки в позиции i. То, что вы, возможно, захотите проверить во втором цикле for, - это список columnNamesMD – Ricardo

ответ

2

В другом цикле вы перебираете элементы tableNamesMD, которые являются все String экземплярами. Когда вы получаете i-th 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 
    } 
} 
0

Я предполагаю, что вы хотите перебрать все таблицы, и для каждой из таблиц перебирать свои столбцы, а также, я полагаю, что столбцы таблицы tableNamesMD.get(i) являются columnNamesMD.get(i), в в этом случае ответ Костантина будет работать.

Но, я думаю, что дизайн естественно ошибочен. Так, вполне естественно, мы хотим перебрать все таблицы и обрабатывать некоторые данные, связанные с каждой таблицей, мы должны делать это объединение в объектно-ориентированном образом, а именно:

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()); 
    } 
} 

Мы устранили связь между таблицей и ее столбцами с помощью индекса списка, а также для замены с Еогеаспом заявлением. Оба эти изменения значительно продвинулись в повышении удобочитаемости кода, что имеет много желательных побочных эффектов.

Также обратите внимание, что мы можем переписать это с помощью потока API как этот

tables.forEach(table -> { 
    System.out.println(table.getName()); 
    table.getColumns().forEach(column -> System.out.println(column.getName())); 
}); 

В общем, я бы сказал, что если что-то мыслится как субъект в объектно-ориентированном программировании, то он должен быть классом.

Смежные вопросы