java - 我应该如何在我的方法的参数中定义一个 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 的方法?
解决方案
您显示的 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);
最好您可以在构造函数中传递回调。
推荐阅读
- elasticsearch - 配置 Elasticsearch 7 集群
- c# - 当需要处理大量内存集合时,是否有任何技巧可以减少内存消耗?
- php - 无法在 PHP 中使用 Ajax JQuery 插入多个内联插入到 Mysql
- php - PHP如何使用循环创建动态数组
- android - 如何找到图像中区域的平均颜色?
- html - 如何从数据库中获取最后 3 个创建的对象?
- powerbi-desktop - 在 PowerBI 桌面另存为菜单中看不到“SQL Server Reporting Services”
- python - Sympy 模块运行非常缓慢
- c# - 在单独的下拉列表中显示保存的值
- latex - Latex 中的签名页