我应该如何在方法的参数中定义 lambda?
How should I define a lambda in my method's arguments?
我有以下自定义 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();
但我不知道我应该如何在接受 lambda 的 RandomSum 中定义方法 retrieveCallback
?
您显示的 lambda 的一种可能 目标类型 是 Consumer
。定义一个方法 setCallback
接受一个 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);
最好在构造函数中传递回调。
您可以在 RandomSum
内定义 retrieveCallback
如下:
public void retrieveCallback(FeedbackHandler feedbackHandler) {
int sum = ...; // Get the value however you like.
feedbackHandler.handleFeedback(sum);
}
然后将这个FeedbackHandler
接口定义为:
public interface FeedbackHandler {
void handleFeedback(int sum);
}
当您将 lambda (sum) -> {...}
传递给 retrieveCallback
时,基本上会发生什么:
retrieveCallback(new FeedbackHandler() {
@Override
public void handleFeedback(int sum) {
...
}
});
我有以下自定义 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();
但我不知道我应该如何在接受 lambda 的 RandomSum 中定义方法 retrieveCallback
?
您显示的 lambda 的一种可能 目标类型 是 Consumer
。定义一个方法 setCallback
接受一个 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);
最好在构造函数中传递回调。
您可以在 RandomSum
内定义 retrieveCallback
如下:
public void retrieveCallback(FeedbackHandler feedbackHandler) {
int sum = ...; // Get the value however you like.
feedbackHandler.handleFeedback(sum);
}
然后将这个FeedbackHandler
接口定义为:
public interface FeedbackHandler {
void handleFeedback(int sum);
}
当您将 lambda (sum) -> {...}
传递给 retrieveCallback
时,基本上会发生什么:
retrieveCallback(new FeedbackHandler() {
@Override
public void handleFeedback(int sum) {
...
}
});