java - 如何根据 ArrayList 中的时间表一次打印一行?

标签 java arraylist java-8 scheduled-tasks java-threads

我正在尝试创建一种一次打印一行的方法,中间有两分钟的延迟。我怎么做?。

这部分代码读取一个文本文件(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 但出于测试目的,文本当前已打印到控制台。如何重写代码使其一次打印一行?

    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();

最佳答案

简单的解决方案是:

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

关于java - 如何根据 ArrayList 中的时间表一次打印一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43305666/

相关文章:

java - 重用插入对象数组的方法的代码

java - 你能改变一个不可变的类吗?

java-8 - 具有值映射函数生成列表的java 8列表分组

java - 从 Java 运行其他程序

java - 当我没有在 Maven 的 pom.xml 中指定它时,版本会是什么?

java - java中使用Iterator如何提高算法效率?

lambda - Collectors.toMap 的 mergeFunction 是否允许修改其参数?

java - 使用 Streams 进行 ArrayList 迭代

java - 如何从 "B"jar 启动 "A"jar 并在 "B"中监视 "A"?

bat 文件中的 java 程序参数