Lambda表达式

Lambda表达式

  1. “λ”是希腊字母的第11个,英文名叫lambda。

  2. lambda可以用来简化线程,它是JDK8的新特性。

一、lambda是对线程的简化,那么我们先来看看,在没有lambda之前,要如何简化线程,进而一步步的推导出lambda表达式

1.直接实现类调用

package com.xxgc.lambda;

//直接实现类调用
public class TestLambda2 {
   public static void main(String[] args) {
       ILove love = new Love();
       love.Love(2);
  }
}
interface ILove{
   void Love(int a);
}
//实现类
class Love implements ILove{
   @Override
   public void Love(int a) {
       System.out.println("I love You-->"+a);
  }
}

2.静态内部类

package com.xxgc.lambda;

//直接实现类调用
public class TestLambda2 {
   //静态内部类
   static class Love implements ILove{
       @Override
       public void Love(int a) {
           System.out.println("I love You-->"+a);
      }
  }
   public static void main(String[] args) {
       ILove love = new Love();
       love.Love(2);
  }
}
interface ILove{
   void Love(int a);
}

3.局部内部类

package com.xxgc.lambda;

//直接实现类调用
public class TestLambda2 {

   public static void main(String[] args) {
       //局部内部类
       class Love implements ILove{
           @Override
           public void Love(int a) {
               System.out.println("I love You-->"+a);
          }
      }
       ILove love = new Love();
       love.Love(2);
  }
}
interface ILove{
   void Love(int a);
}

4.匿名内部类

package com.xxgc.lambda;

//直接实现类调用
public class TestLambda2 {

   public static void main(String[] args) {
   //匿名内部类
       ILove love = new ILove() {
           @Override
           public void Love(int a) {
               System.out.println("I love You-->"+a);
          }
      };
       love.Love(2);
  }
}
interface ILove{
   void Love(int a);
}

5.lambda表达式

package com.xxgc.lambda;

//直接实现类调用
public class TestLambda2 {

   public static void main(String[] args) {
   //lambda表达式
       ILove love = (int a) ->{
               System.out.println("I love You-->"+a);
          };
       love.Love(520);
  }
}
interface ILove{
   void Love(int a);
}

6.再次简化lambda表达式,去掉参数类型

package com.xxgc.lambda;

//直接实现类调用
public class TestLambda2 {

   public static void main(String[] args) {
   //lambda表达式
       ILove love = (int a) ->{
               System.out.println("I love You-->"+a);
          };
   //简化1:去掉参数类型
       love = (a) -> {
           System.out.println("I love You-->"+a);
      };
       love.Love(520);
  }
}
interface ILove{
   void Love(int a);
}

7.再次简化,去掉括号

package com.xxgc.lambda;

//直接实现类调用
public class TestLambda2 {

   public static void main(String[] args) {
   //lambda表达式
       ILove love = (int a) ->{
               System.out.println("I love You-->"+a);
          };
   //简化1:去掉参数类型
       love = (a) -> {
           System.out.println("I love You-->"+a);
      };
   //简化2:去掉括号简化
       love = a -> {
           System.out.println("I love You-->"+a);
      };
       love.Love(520);
  }
}
interface ILove{
   void Love(int a);
}

8.简化3:去掉花括号

package com.xxgc.lambda;

//直接实现类调用
public class TestLambda2 {

   public static void main(String[] args) {
      // ILove love = null;
   //lambda表达式
       ILove love = (int a) ->{
               System.out.println("I love You-->"+a);
          };
   //简化1:去掉参数类型
       love = (a) -> {
           System.out.println("I love You-->"+a);
      };
   //简化2:去掉括号简化
       love = a -> {
           System.out.println("I love You-->"+a);
      };
   //简化3:去掉花括号
       love = a -> System.out.println("I love You-->"+a);
       love.Love(521);
  }
}
interface ILove{
   void Love(int a);
}

总结:

  1. lambda表达式只能有一行代码的情况下才能简化为一行,如果有多行,那么就用代码块包裹
  1. 前提还要是接口为函数式接口,即只有一个方法
  1. 多个参数也可以去掉参数类型,要去掉就都要去掉,必须加上括号。
package com.xxgc.lambda;

//直接实现类调用
public class TestLambda2 {

   public static void main(String[] args) {
      // ILove love = null;
   //lambda表达式
       ILove love = (int a,int b) ->{
               System.out.println("I love You-->"+a);
          };
   //简化1:去掉参数类型
       love = (a,b) -> {
           System.out.println("I love You-->"+a);
           System.out.println("I love You-->too");
      };
   //简化2:去掉括号简化
       //错误了
      /* love = a,b -> {
           System.out.println("I love You-->"+a);
       };*/
   //简化3:去掉花括号
       //love = (a,b) -> System.out.println("I love You-->"+a);
       love.Love(521,502);
  }
}
interface ILove{
   void Love(int a,int b);
}

//总结:
   //lambda表达式只能有一行代码的情况下才能简化为一行,如果有多行,那么就用代码块包裹
   //前提还要是接口为函数式接口,即只有一个方法
   //多个参数也可以去掉参数类型,要去掉就都要去掉,必须加上括号。

 

上一篇:python hashlib库(MD5,sha1,sha256,sha512,pbkdf2_hmac)用法及pbkdf2原理


下一篇:692. Top K Frequent Words