2017-04-09 3 views
1

私は一度に1行を印刷するメソッドを作成しようとしていますが、その間に2分の遅延があります。それ、どうやったら出来るの?。ArrayListからスケジュールに従って1行を出力する方法はありますか?

コードのこの部分は、テキストファイル(questionsFile)を読み込み、ArrayListのを作成します。ここでは

public Broadcaster(Socket connection) throws IOException { 

    read = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
    write = new PrintStream(connection.getOutputStream()); 

    List<String> questionsList = new ArrayList<>(); 
    try (Stream<String> questionsStream = Files.lines(Paths.get(questionsFile))) { 
     questionsList = questionsStream 
       .parallel() 
       .collect(Collectors.toList()); 

    } catch (IOException w) { 
     w.printStackTrace(); 
    } 

は、タイマーがある怒鳴るが、何らかの理由で、私はそれを動作させることはできません。 ArrayList全体が遅延なく印刷されます。私の目的は、printStreamを使用することですが、テスト目的で、テキストは現在コンソールに出力されています。一度に1行ずつ出力するようにコードをどのように書き直すことができますか?

List<String> finalQuestionsList = questionsList; 
    timer.schedule(task(() -> finalQuestionsList.forEach(System.out::println)) 
      , 120, TimeUnit.SECONDS.toMillis(1)); 
} 

private TimerTask task(Runnable task) { 
    return new TimerTask() { 
     @Override 
     public void run() { 
      task.run(); 
+0

は、あなたが()timer.startを呼び出したのですか? は定期的にタイマーを設定していますか? –

+0

直接ではありませんが、私はすべてを実行させるExecutorServiceでメソッドを起動しています。 –

答えて

4

自明な解は次のようになります。

for (String question : questionsList) { 
    timer.schedule(task(() -> System.out.println(question)), 0); 
    try { 
     sleep(2000); 
    } catch (Exception ignored) {} 
} 
+0

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

+0

もちろん、このループが「スリープ」を介してスレッドをブロックするときには、タイマーを使用するのは面白いです。このコードでは、タイマーは完全に廃止されました。このコードは、最後の要素が印刷されてから2秒待っています... – Holger

+0

あなたはそうです。私はできるだけ質問から元のコードの近くに滞在したかったのです。また、「些細な解決策: – theDima

関連する問題