麦麦脆汁鸡

导航

lambda表达式

lambda

  • 避免匿名内部类定义过多

  • 其实质属于函数式编程的概念

  • 去掉了一堆没有意义的代码,只留下核心的逻辑

     

  • 理解函数式接口是学习Java8 lambda表达式的关键所在

    • 函数式接口的定义:

      • 任何接口,如果只包含唯一一个抽象方法,那么他就是一个函数式接口。

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

 

package com.thread.lambda;

/*
推导lambda表达式
*/
public class TestLambda1 {

   //3.静态内部类
   static class Like2 implements ILike{
       @Override
       public void lambda() {
           System.out.println("i like lambda2");
      }
  }


   public static void main(String[] args) {
       ILike like = new Like();
       like.lambda();

       ILike likex= new Like2();
       likex.lambda();


       //4.局部内部类
       class Like3 implements ILike{
           @Override
           public void lambda() {
               System.out.println("i like lambda3");
          }
      }
       ILike likes = new Like3();
       likes.lambda();

       //5.匿名内部类,没有类名,必须借助接口或父类
       ILike likey = new ILike(){
           @Override
           public void lambda() {
               System.out.println("i like lambda4");
          }
      };
       likey.lambda();


       //6.用lambda简化
       ILike likez = ()->{
           System.out.println("i like lambda5");
      };
       likez.lambda();

  }

}
//1.定义一个函数式接口
interface ILike{
   void lambda();
}

//2.实现类,重写接口方法
class Like implements ILike{
   @Override
   public void lambda() {
       System.out.println("i like lambda");
  }
}

i like lambda i like lambda2 i like lambda3 i like lambda4 i like lambda5

 

package com.thread.lambda;

public class TestLambda2 {

   //2.静态内部类
   static class Love2 implements Ilove{
       @Override
       public void love(int a) {
           System.out.println("i love you2-->"+a);
      }
  }


   public static void main(String[] args) {

       //3.局部内部类
       class Love3 implements Ilove{
           @Override
           public void love(int a) {
               System.out.println("i love you3-->"+a);
          }
      }

       //4.匿名内部类
       Ilove love = new Ilove(){
           @Override
           public void love(int a) {
               System.out.println("i love you4-->"+a);
          }
      };
       love.love(5);

       //5.Lambda表达式
       Ilove loven = (int a)->{
           System.out.println("i love you5-->"+a);
      };
       loven.love(520);
       
       //【Lambda简化】:参数类型、小括号、大括号!
       love = a-> System.out.println("i love you5-->"+a);
       love.love(521);
       //总结:lambda表达式只能有一行代码的情况下才能简化成为一行,如果有多行,那么就用代码块(大括号)包裹。
       //前提是接口是函数式接口
       //多个参数也可以去掉参数类型,要去就都去掉,必须加上括号

       Ilove lovex = new Love1();
       lovex.love(2);

       Ilove lovey = new Love2();
       lovey.love(3);

       Ilove lovez = new Love3();
       lovez.love(4);

  }

}

interface Ilove{
   void love(int a);
}

//1.类
class Love1 implements Ilove{
   @Override
   public void love(int a) {
       System.out.println("i love you1-->"+a);
  }
}

i love you4-->5 i love you5-->520 i love you5-->521 i love you1-->2 i love you2-->3 i love you3-->4

 

 

 

 

posted on 2022-03-16 17:50  麦麦脆汁鸡  阅读(99)  评论(0编辑  收藏  举报