Lamda表达式

简化代码,避免匿名内部类定义过多

学习Lamda表达式的关键在于理解Functional Interface(函数式接口)

函数式接口的定义:任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口

                                   public interface Runnable {

                                               public abstract void run();

                                   }

                                   对于函数式接口,我们可以通过lamda表达式来创建该接口的对象

package com.wang.lamda;

public class LamdaDemo01 {
   //3、静态内部类
   //把实现类写成静态内部类
   static class Like2 implements ILike{

       @Override
       public void Lambda() {
           System.out.println("i like lambda2");
      }
  }
   public static void main(String[] args) {
       //接口new实现类
       ILike like=new Like();
       like.Lambda();

       like=new Like2();
       like.Lambda();

    //4、局部内部类
       class Like3 implements ILike{

           @Override
           public void Lambda() {
               System.out.println("i like lambda3");
          }
      }
       like=new Like3();
       like.Lambda();

    //5、匿名内部类,没有类的名称,必须借助接口或父类
        like=new ILike() {
            @Override
            public void Lambda() {
                System.out.println("i like lambda4");
            }
        };
        like.Lambda();
    //6、用lambda简化
       like=()-> {System.out.println("i like lambda5");};
       like.Lambda();
  }
}
//1、定义一个函数式接口
interface ILike{
   //只要在接口里面,自动就是抽象的,不需要写出来
   void Lambda();
}
//2、实现类
class Like implements ILike{

   @Override
   public void Lambda() {
       System.out.println("i like lambda");
  }
}
package com.wang.lamda;

public class LambdaDemo {
   //4、外部类放到内部 静态内部类
   static class Love2 implements ILove{
       @Override
       public void love(int a) {
           System.out.println("i love you "+a);
      }
  }
   //main方法
   public static void main(String[] args) {
       ILove love=new Love();
       love.love(1);

       love=new Love2();
       love.love(2);

   //5、局部内部类
   class Love3 implements ILove{
    @Override
           public void love(int a) {
               System.out.println("i love you "+a);
      }
  }

       love=new Love3();
       love.love(3);

    //6、匿名内部类
       love=new ILove() {
           @Override
           public void love(int a) {
               System.out.println("i love you "+a);
          }
      };
       love.love(4);

    //7、Lambda表达式简化 方法中有参数
       love=(int a)->{ System.out.println("i love you "+a); };
       love.love(5);
       //7.1 简化Lambda
       love=a -> {
           System.out.println("i love you "+a);
      };
       love.love(6);
       //7.2
       love=a -> System.out.println("i love you "+a);
       love.love(7);
       
  }
}
//1、定义接口
interface ILove{
   //2、写方法,接口中是抽象方法,不用写abstract
   void love(int a);
}
//3、实现类
class Love implements ILove{

   @Override
   public void love(int a) {
       System.out.println("i love you "+a);
  }
}

  总结

Lambda表达式:

只有一行代码的情况下才能去掉花括号,只剩下一行
多个参数也可以去掉参数类型,要去掉就都去掉,必须加上括号
前提是接口是函数式接口

posted @ 2019-12-03 21:49  王迎婧  阅读(270)  评论(0编辑  收藏  举报