Lambda 计划从 ArrayList 打印

标签 lambda timer java-8 scheduled-tasks

我正在尝试创建一个计时器,以便按计划从 ArrayList 中打印出来。但我收到此错误:

Cannot resolve method 'schedule(<lambda expression>,int,java.util.concurret.TimeUnit)'

为什么我会收到此错误?我该怎么办?

List<String> finalQuestionsList = questionsList;
timer.schedule(()-> finalQuestionsList.forEach(write::println),120, TimeUnit.SECONDS); 

最佳答案

JLS断言 lambda 表达式的类型:

A lambda expression is compatible in an assignment context, invocation context, or casting context with a target type T if T is a functional interface type (§9.8) and the expression is congruent with the function type of the ground target type derived from T.

  1. TimerTask 不是 Function Interface ,因此您不能将 lambda 表达式分配给 TimerTask。但您可以使用适配器方法 task 将 Runnable 适配为 TimerTask。

  2. Timer.schedule方法不能采用 TimeUnit,但您可以使用 TimeUnit.toMills()将持续时间转换为毫秒。

  3. 我在代码片段中看不到任何 write 变量,因此我使用 System.out 来代替。

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

关于Lambda 计划从 ArrayList 打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43283375/

相关文章:

java-8 - 无法弄清楚用法

c# - 检查倒计时器是否为0

c++ - 将 integral_constants 的元组转换为 int 的 constexpr 元组

ios - Xcode Swift Ios 应用程序 : Adding delay

c# - 将变量作为参数传递给类并在该类的方法中更改该变量的值

java - Java编译器是否优化流过滤?

java - 无换行符和/或垂直方向的 FlowLayout

java - RxJava1 和 RxJava2 的区别

java - 将一个 HashMap 缩减为另一个 HashMap

lambda - 如何在 Java 功能接口(interface)中使用 andThen 或类似方法包装函数