2016-04-27 16 views
-2

openCSVリーダーでcsvファイルを読み込んでいます。結果としてListを与えるreadAllメソッドがあります。文字列の配列を含むリストを反復する方法

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

私はそれから各文字列を取得したいと思います。私はこれを試みたが、うまくいかなかった。

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

それはforeachObjectを入力して適用することはできない、と言って私にエラーを与えています。どのようにそれから文字列を取得するには?

+2

なぜ 'element'は' String [] 'ではなく' Object'ですか? – CollinD

+0

コードで型キャストが正しく使用されていません。 – aksappy

答えて

2

それを解決する方法は、あなたのために重要ではない場合、私はforeachステートメント使用することをお勧め:それ以外の場合は

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

を、あなたは

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); 
のように書く必要があります

、これはきれいに見えず、読みにくいかもしれません。

+0

を参照してください。2番目の方法は機能しません。つまり、Foreachは型オブジェクトに適用されません。 –

+0

@LokeshS、生の型のイテレータは使用しないでください。 – Andrew

+1

ありがとうございました... –

2

リスト要素のタイプはString[]です。宣言でこれを使用します。

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

... 

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

いいえ、それは働いていません必須:Java.lang.String [] Found:Java.lang.Object。私は驚いています....私は期待された:オブジェクト、しかしfound:String [] –

+0

はい、イテレータも正しく型付けされる必要があります。更新 – Henry

0

最も簡単な方法は、あなたが配列のために行ったよう、foreachループを使用することです

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

、次のコードを試してみてください。

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

あなたが本当にIteratorを必要とする場合は、生タイプを使用しないでください:

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

ブロックが単一の命令を持っている場合でも、常にブロックの周りに中括弧を使用する必要があります。これにより、コードはより読みやすく、保守性が向上し、多くのバグを回避できます。

+0

ありがとう –

0

Java 8が好きな人は、もっと宣言的です。

myEntries.forEach(entries -> 
    Arrays.stream(entries).forEach(entry -> System.out.println(entry))); 
関連する問題