首页 > 解决方案 > 我应该如何在我的方法的参数中定义一个 lambda?

问题描述

Ι 有以下自定义Runnable:

class RandomSum extends Runnable {

   public void run() {
     float sum - 0;
     for(int i = 0; i<1000000;i++){
       sum+=Math.random();
     } 
   }
}

我想这样运行它:


  RandomSum s =new RandomSum();
  s.retrieveCallback((sum)->{
    System.out.println(sum);
  });
  Thread thread = new Thread();
  thread.start();

但我不知道我应该如何retrieveCallback在 RandomSum 中定义接受 lambda 的方法?

标签: javalambdajava-threads

解决方案


您显示的 lambda 的一种可能目标类型Consumer是. 定义一个setCallback接受 a的方法Consumer<Float>并将其存储为实例变量。for然后在循环之后调用它。

class RandomSum implements Runnable {
    Consumer<Float> callback;
   
    public void setCallback(Consumer<Float> callback) {
        this.callback = callback;
    }

    public void run() {
        float sum = 0;
        for(int i = 0; i<1000000;i++){
            sum += Math.random();
        } 
        callback.accept(sum);
    } 
}

主叫方

RandomSum s =new RandomSum();
s.setCallback((sum)->{
    System.out.println(sum);
});

或者使用方法引用,

s.setCallback(System.out::println);

最好您可以在构造函数中传递回调。


推荐阅读