A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 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;
    }
}


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马