2016-04-27 2 views
-2

Ich lese csv-Datei mit openCSV-Leser. Es gibt eine Methode readAll, die List als Ergebnis angibt.Wie man über eine Liste iteriert, die Array von Zeichenfolgen enthält

List<String[]> myEntries = reader.readAll(); 

Ich möchte von ihm die jede Saite bekommen. Ich habe es versucht, aber es hat nicht geklappt.

Iterator itr = myEntries.iterator(); 
while(itr.hasNext()) { 
    Object element = itr.next(); 
    for(String temp:element) 
     System.out.println(temp); 
} 

Es sagt mir ein Fehler geben, foreach kann nicht auf den Typ Object angewendet werden. Wie bekommt man die Fäden daraus?

+2

Warum ist 'element' ein' Objekt' anstelle von 'String []'? – CollinD

+0

Typumwandlung wird in Ihrem Code nicht richtig verwendet. – aksappy

Antwort

2

Wenn ein Weg, um es zu lösen ist nicht wichtig für Sie, ich schlage vor, mit foreach Aussagen:

for(String[] a : myEntries) 
    for(String s : a) 
     // do what you want to 

Andernfalls sollten Sie schreiben wie

Iterator<String[]> iterator = myEntries.iterator(); 
while(itr.hasNext()) 
    for(String temp : itr.next()) 
     // Don't worry, itr.next() will be created only one time 
     // for an each iteration (while) 
     System.out.println(temp); 

, das sieht nicht schön aus und kann Schwierigkeiten beim Lesen haben.

+0

Die zweite funktioniert nicht, es sagt Foreach ist nicht anwendbar auf Typ Objekt –

+0

@ LokeshS, verwenden Sie keine rohe Art von Iterator, korrigierte ich – Andrew

+1

Vielen Dank ... –

2

Die Listenelemente sind vom Typ String[]. Verwenden Sie dies in der Erklärung:

Iterator<String[]> itr = myEntries.iterator(); 

... 

String[] element = itr.next(); 
+0

Nein, es funktioniert nicht. Erforderlich: Java.lang.String [] Gefunden: Java.lang.Object. Ich bin überrascht .... Ich erwartete erforderlich: Objekt, aber gefunden: String [] –

+0

Ja, der Iterator muss auch korrekt eingegeben werden. Siehe Update – Henry

0

Versuchen folgenden Code,

for (String[] element : myEntries) { 
    for (String temp : element) 
     System.out.println(temp); 

} 
0
reader.readAll().forEach(stringArray -> { 
    for(String element : stringArray){ 
     System.out.println(element); 
    } 
}); 
0

Der einfachste Weg ist es, eine foreach-Schleife zu verwenden, wie Sie gerade für das Array tat

for (String[] entry : myEntries) { 
    for (String temp : element) { 
     System.out.println(temp); 
    } 
} 

Wenn Sie wirklich einen Iterator brauchen, Verwenden Sie dann keinen Rohtyp:

for (Iterator<String[]> it = myEntries.iterator(); it.hasNext();) { 
    String[] entry = it.next(); 
    for (String temp : entry) { 
     System.out.println(temp); 
    } 
} 

Sie sollten geschweifte Klammern immer um Blöcke herum verwenden, selbst wenn Ihr Block eine einzige Anweisung hat. Das macht den Code lesbarer, wartbarer und hilft, viele Fehler zu vermeiden.

+0

Vielen Dank –

0

Wenn Sie Java 8 bevorzugen, ist es umso deklarativer.

myEntries.forEach(entries -> 
    Arrays.stream(entries).forEach(entry -> System.out.println(entry))); 
Verwandte Themen