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

Nachdem beide ArraysJava bekommen Größe von inneren Arraylist

bevölkerten
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 
     } 
} 

Es ist ein Fehler mit der inneren for-Schleife am tableNamesMD.get (i) .Size()

Es ist Sagen Sie "Die Methode size() ist nicht definiert für den Typ String"

+0

Verwenden Sie 'columnNamesMD.get (i)' anstelle von 'tableNamesMD.get (i)'. –

+0

Sie sollten wahrscheinlich die verschachtelte ArrayList - columnNamesMD durchlaufen. tableNamesMD ist nicht verschachtelt. – Eran

+0

Ihr tableNamesMD ist eine Arraylist von Strings. Wenn Sie also get (i) .size() verwenden, versuchen Sie, die Größe eines Strings an Position i zu erhalten. Was Sie in Ihrer zweiten for-Schleife einchecken möchten, ist die columnNamesMD-Liste – Ricardo

Antwort

2

In Ihrer anderen Schleife durchlaufen Sie die Elemente tableNamesMD, die alle String Instanzen sind. Wenn Sie die i-th String erhalten, löst das Aufrufen von size() einen Fehler bei der Kompilierung aus.

Wahrscheinlich meinte Sie:

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

Ich gehe davon aus, dass Sie alle Tabellen iterieren möchten, und für jede der Tabellen seinen Säulen laufen, auch, nehme ich an, dass die Spalten der Tabelle tableNamesMD.get(i) sind columnNamesMD.get(i), in In diesem Fall würde Kostantins Antwort funktionieren.

Aber ich denke, das Design ist natürlich fehlerhaft. Da ganz natürlich wollen wir alle Tabellen zu durchlaufen und einige Daten handhaben, die zu jeder Tabelle verknüpft sind, sollten wir diese Verbindung in einer objektorientierten Art und Weise tun, das heißt:

public interface Table { 
    String getName(); 
    List<Column> getColumns(); 
} 

public interface Column { 
    String getName(); 
} 

Und dann würde die Iteration Code aussehen

List<Table> tables = ...; 
for (Table table : tables) { 
    System.out.println(table.getName()); 
    for (Column column : columns) { 
     System.out.println(column.getName()); 
    } 
} 

Wir eliminiert die Assoziation zwischen einer Tabelle und ihre Spalten über einen Listenindex, sowie die für eine foreach-Anweisung zu ersetzen. Diese beiden Änderungen tragen wesentlich zur Verbesserung der Lesbarkeit des Codes bei, der viele wünschenswerte Nebenwirkungen hat.

Beachten Sie auch, dass wir diese mit Strom API wie diese

Im Allgemeinen

tables.forEach(table -> { 
    System.out.println(table.getName()); 
    table.getColumns().forEach(column -> System.out.println(column.getName())); 
}); 
umschreiben können, würde ich sagen, dass wenn etwas als eine Einheit in der objektorientierten Programmierung gedacht wird, dann sollte es eine Klasse sein.