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

如题,因为博主也是最近才接触到Lambda表达式的(PS 在这里汗颜一会)。我并不会讲解它的原理,诚然任何一件事物如果理解原理的话,使用它必将更加容易。但博主在学习的时候,大多数时候都是学会怎么用,然后在细究原理。就像你骑自行车之前,难道首先还要研究自行车的原理么?

首先Lambda表达式的最简单应用如下

Lambda表达式法



  •         String lam= "初次相识Lambda";



  •         new Thread(() -> System.out.println(lam)).start();


传统方法



  •   String tradition="传统方法";



  •         new Thread(new Runnable() {



  •             @Override



  •             public void run() {



  •                 System.out.println(tradition);



  •             }



  •         }).start();


输出结果


很简洁有没有?省略了好多代码是不是,在这里 你可以发现”,Lambda表达式和在Thread创建一个匿名类的作用是一样。我们可以这样认为Lambda表达式本身代表了一个匿名类。

这就是Lambda最大的作用,当然Lambda表达式只能创建接口interface对象。 创建类是不行的,抽象类也是不行的 ,只要是类都是不行的。

首先,我定义了一个自定义的接口,可以用来测试



  • @FunctionalInterface



  • public interface Lam {



  •     //Lambda表达式调用的方法



  •     void bda();







  •     //接口的默认方法



  •     default void test(){



  •         System.out.println("我是默认的方法");



  •     };



  •     //接口的静态方法



  •     static void test1(){



  •         System.out.println("我是静态方法");



  •     }



  • }



使用Lambda表达式 你首先要知道的


  • Lambda表达式只能是接口 interface的创建(PS从上面的例子可以看出来,Runnable是接口,可以查看源代码),并且这个接口只能包含一个方法(除了default方法和static方法)。在接口中创建default方法和static方法都必须要实现方法体如下图                                                  如果你用Lambda表达式来创建类 class,则会出现以下错误 ”Target type of a lambda conversion must be an interface“
  • 如果你怕自己的定义的接口不符合Lambda表达式的规范 ,你可以在接口interfaca 上面添加注解@FunctionalInterface

3.Lambda表达式的规范表示格式 (parameters) ->{ statements; }。在某些时刻,你还可以简化这个格式



  •   //接口定义的方法无参数时候,并且你想要执行操作也只有一句代码的时候,Lambda会自动返回一句代码,并且可以不用加{}



  •         Lam lam1=()->System.out.println("无参数");


你可以发现后面的大括号{ }没了,这是因为后面代码如果只有一句的话,是可以省略{ } 的

我们把Lam接口定义的调用方法参数修改一下,多出了一个String类型的形参s



  • //Lambda表达式调用的方法



  •     void bda(String s);


这时候 我们如果使用Lambda表达式,则可以这样



  • //接口定义的方法有参数时候,并且你想要执行的操作也只有一句代码的时候



  •         Lam lam1=e->System.out.println(e);//这一句还有简化版本  Lam lam1=System.out::println;



  •         lam1.bda("4556");


你又会发现,前面的()中括号也没了,这是因为当参数只有一个的时候,是可以省略()的。

当然也有你要执行很多代码的时候,那这时候可以这样



  • //接口定义的方法有参数时候,并且你想要执行的操作有很多句代码的时候



  •         Lam lam1 = (String e) -> {



  •             String a = e + "add";



  •             System.out.println(a);



  •         };



  •         lam1.bda("test+");


输出结果如下


当然你还会问Lambda表达式能不能返回东西呢?这是肯定能的,首先我们再把上面的Lam接口方法修改一下



  • //Lambda表达式调用的方法



  •     String bda(String s);


让bda方法返回一个String值,这次如果我们用Lambda的话


  • //接口定义的方法有返回值的时候



  •         Lam lam1=s ->{System.out.println(s);return "我是返回的数据";};



  •         lam1.bda("test1");



  •         System.out.println(lam1.bda("test2"));


运行的结果:


总结 Lambda表达式 就是用来创建一个匿名的接口对象,即 它本身就是一个接口的匿名实例。只不过这个接口 有一些条件限制。


【转载】原文地址:https://blog.csdn.net/a1064072510/article/details/80947286

3 个回复

倒序浏览
奈斯
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马