Java笔记(13) 简单的Lambda表达式

打印 上一主题 下一主题

主题 949|帖子 949|积分 2847

lambda表达式在jdk1.8引入,属于函数式编程,可以在特定的场景中省去很多没有意义的代码,只留下核心逻辑,使代码看起来更简洁。
函数式接口

任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。对于函数式接口,可以通过lambda表达式来创建该接口的对象。
lambda表达式的推导

1. 正常实现
  1. //1. 首先定义一个函数式接口
  2. interface LambdaInterface{ void lambda(); }
  3. //2. 实现类
  4. class LambdaImpl implements LambdaInterface{
  5.   public void lambda(){
  6.     System.out.println("lambda test");
  7.   }
  8. }
  9. //3. 一般实现
  10. public class TestLambda{
  11.   //main函数
  12.   public static void main(String[] args){
  13.     //创建一个新对象,
  14.     LambdaImpl lambda = new LambdaImpl();
  15.     lambda.lambda();
  16.   }
  17. }
复制代码
2. 静态内部类实现

将单独的实现类添加到Test类中,作为静态内部类,少定义了一个外部类
  1. //1. 定义一个函数式接口
  2. interface LambdaInterface { void lambda(); }
  3. //2. 使用静态内部类实现
  4. public class TestLambda {
  5.   //实现类作为静态内部类
  6.   static class LambdaImpl implements LambdaInterface {
  7.     public void lambda() {
  8.       System.out.println("lambda test!!");
  9.     }
  10.   }
  11.   public static void main(String[] args) {
  12.       new LmabdaImpl().lambda();
  13.   }
  14. }
复制代码
3. 通过局部内部类实现

将静态内部类进一步简化为局部内部类
  1. //1. 定义一个函数式接口
  2. interface LambdaInterface { void lambda(); }
  3. //2. 使用局部内部类实现
  4. public class TestLambda{
  5.   public static void main(String[] args) {
  6.     //2.实现类作为局部内部类
  7.     class LambdaImpl implements LambdaInterface{
  8.       public void lambda(){ System.out.println("lambda test!!");}
  9.     }
  10.   }
  11.   new LambdaImpl().lambda();
  12. }
复制代码
4. 通过匿名内部类实现

实现类是不需要类名的,只要实现方法即可,这里将其作为匿名内部类,进行类名的简化
  1. //1. 定义一个函数式接口
  2. interface LambdaInterface { void lambda(); }
  3. //2. 使用匿名内部类实现
  4. public class TestLambda{
  5.   public static void main(String[] args){
  6.     //直接在匿名内部类中实现LambdaInterface接口
  7.     LambdaTest lambda = new LambdaInterface(){
  8.       public void lambda(){
  9.         System.out.println("lambda test!!");}
  10.     }
  11.     lambda.lambda();//父类引用指向子类实例,多态
  12.   }
  13. }
复制代码
5. lambda简化

由于接口式函数中只有一个方法,即使通过匿名内部类实现,也必须指定方法名,这是没有意义的。因此在lambda表达式中,将默认的类名和方法名省略掉
  1. //1. 定义一个函数式接口
  2. interface LambdaInterface { void lambda(); }
  3. //2. 使用lambda表达式实现
  4. public class TestLambda{
  5.   public static void main(String[] args){
  6.     //将指定类名和方法名的过程全部省略,直接使用()->{}代替
  7.     LambdaTest lambda = ()->{ System.out.println("lambda test!!");}
  8.     lambda.lambda();//父类引用指向子类实例,多态
  9.   }
  10. }
复制代码
希望可以帮到你,还有未来的我

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

勿忘初心做自己

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表