浅谈Java中的Lambda表达式

什么是Lambda表达式?

Lambda表达式也被称为箭头函数、匿名函数、闭包

Lambda表达式体现的是轻量级函数式编程思想

'->'符号式Lambda表达式核心操作符号,符号左侧是操作参数,符号右侧是操作表达式

JDK8新特性

函数式接口

函数式接口,就是Java类型系统中的接口。函数式接口,是只包含一个接口方法的特殊接口。语义化检测注解:@FunctionalInterface

函数式接口,只包含一个操作方法。Lambda表达式,只能操作一个方法,Java中的Lambda表达式,核心就是一个函数式接口的实现。

Java类型系统内建函数式接口

java.util.function.Function<T,R>

接收参数对象T,返回结果对象R

java.util.function.Supplier<T>

不接受参数,提供T对象的创建工厂

lambda表达式的基本语法

1)声明:就是和lambda表达式绑定的接口类型

2)参数:包含在一堆圆括号中,和绑定的接口中的抽象方法中的参数个数及顺序一致。

3)操作符:->

4) 执行代码块:包含在一对大括号中,出现在操作符号的右侧。

[接口声明]=(参数)->{执行代码块};

代码实例

参考菜鸟教程:https://www.runoob.com/java/java8-lambda-expressions.html

public class Java8Tester {
   public static void main(String args[]){
      Java8Tester tester = new Java8Tester();
        
      // 类型声明
      MathOperation addition = (int a, int b) -> a + b;
        
      // 不用类型声明
      MathOperation subtraction = (a, b) -> a - b;
        
      // 大括号中的返回语句
      MathOperation multiplication = (int a, int b) -> { return a * b; };
        
      // 没有大括号及返回语句
      MathOperation division = (int a, int b) -> a / b;
        
      System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
      System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction));
      System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication));
      System.out.println("10 / 5 = " + tester.operate(10, 5, division));
        
      // 不用括号
      GreetingService greetService1 = message ->
      System.out.println("Hello " + message);
        
      // 用括号
      GreetingService greetService2 = (message) ->
      System.out.println("Hello " + message);
        
      greetService1.sayMessage("Runoob");
      greetService2.sayMessage("Google");
   }
    
   interface MathOperation {
      int operation(int a, int b);
   }
    
   interface GreetingService {
      void sayMessage(String message);
   }
    
   private int operate(int a, int b, MathOperation mathOperation){
      return mathOperation.operation(a, b);
   }
}

总结

1.lambda表达式,必须和接口进行绑定。

2.lambda表达式的参数,可以附带0个到n个参数,括号中的参数类型可以不用指定,jvm在运行时,会自动根据绑定的抽象方法中的参数进行推导

3.lambda表达式的返回值,如果代码块只要一行,并且没有大括号,不用写return关键字,单行代码的执行结果,会自动返回。如果添加了大括号,或者有多行代码,必须通过return关键字返回执行结果。

猜你喜欢

转载自blog.csdn.net/lovebaby1689/article/details/113758567