2017-11-04 7 views
2

CSVファイルから読み込み、リンクされたリストに内容を追加して、特定のビットのデータを検索する必要があります。現時点では、CSVの結果はストリームに送られますが、これをリンクリストに入れる方法はわかりません。次のように私のコードは次のようになります。以下の1つのライナーのようなこのストリームの内容をリンクリストに追加する方法は?

String fileName = "Catalogue.csv"; 
    LinkedList<String>catalogue = new LinkedList(); 

    try (Stream<String> stream = Files.lines(Paths.get(fileName))) { 

       stream.forEach(System.out::println); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
+0

あなたは現在、なぜできない、要素を印刷しています印刷する代わりにリストに追加しますか? –

+1

https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#readAllLines-java.nio.file.Path-なぜリンクされたリスト?あなたのコードはそれよりも遅いのが好きですか? –

+0

データを検索する必要がある場合は、ストリームの全内容をリストに集める必要はありません。ストリーム上で直接検索することができます –

答えて

1

何か作業をする必要があります:

catalogue = stream.collect(Collectors.toCollection(LinkedList::new)); 

あなたがここにCollectorsドキュメントhereLinkedListドキュメントを参照することができます。上のコメントで述べたように、この場合はLinkedListを不必要に使用するようにアドバイスしませんが、コードが少し遅くなります。あなたは正確にLinkedListが必要な場合は

+1

これはリストを作成し、リストのコピーを作成します。それは不必要に非効率的です。 stream.colect(Collectors.toCollection(LinkedList :: new))でリンクリストを直接作成することができます –

+0

@JBNizet申し訳ありません。私はそれを編集させてください –

+0

@JBNizetあなたも同様にそれを行うことができます忘れて..思い出させるためにありがとう。 :) –

1

、あなたは自分のストリームを収集することができます。

stream.collect(Collectors.toCollection(LinkedList::new)); 

または、リストがすでに作成されている場合:

stream.forEach(catalogue::add); 
関連する問題