本帖最后由 Mylo 于 2018-6-20 12:55 编辑
Lambda表达式的思想就是:只执行我们想执行的代码!例如 public class LambdaForTest {
public static void main(String[] args) {
Runnable r = ()->{
System.out.println("创建新的线程" + Thread.currentThread().getName());
};
new Thread(r,"test").start();
}
} 控制台输出:创建新的线程test |
从上面的例子我们可以看出,我们只要把重写的代码放进 (参数)->{}里面的大括号里面即可,不需要定义匿名内部类或者实现Runnable接口,这就是lambda表达式的一个好处,代码方便了很多。不过,我们都说,lambda表达式的思想执行我们想执行的内容,不追求过程,只追求结果,那么,基于这个前提,我们甚至可以更加偷懒,例如,这个时候如果有别的类也有相应的功能,我们直接调用即可!
1. 首先,我们根据我们常用的方式去搞: public class LambdaForTest {
public static void main(String[] args) {
Add add = (a ,b)->{
int sum = ForSum.getSum(a,b);
return sum;
};
}
}
interface Add{
int getSum(int a ,int b);
}
class ForSum{
public static int getSum(int a ,int b){
return a + b;
}
} |
从上面的例子我们可以分析,我们直接去调用别人的方法去实现我们的逻辑,那么,lambda有没有提供相对应方法给我们直接去调用别人的方法呢?答案是肯定的!这叫做方法的引用!
格式: 静态方式 : 类名.方法名 普通方式: new 类名().方法名
上面的案例可以改为: public class LambdaForTest {
public static void main(String[] args) {
Add add = ForSum::getSum;
int sum = add.getSum(10, 20);
System.out.println(sum);
}
}
interface Add{
int getSum(int a ,int b);
}
class ForSum{
public static int getSum(int a ,int b){
return a + b;
}
} |
调用非静态
public class LambdaForTest {
public static void main(String[] args) {
Add add = new ForSum()::getSum2;
int sum = add.getSum(10, 20);
System.out.println(sum);
}
}
interface Add{
int getSum(int a ,int b);
}
class ForSum{
public static int getSum(int a ,int b){
return a + b;
}
public int getSum2(int a ,int b){
return a + b;
}
} |
|