Lambda表达式用法总结

一,概念

  1. **作用:**Lambda表达式用于简化匿名内部类的语法

    /*
    创建一个线程
    */
    
    //使用内部类
    class Th extends Thread{
        @Override
        public void run() {
            System.out.println("A");
        }
    }
    Th t = new Th();  //创建线程对象
    t.start();  //启动线程
    
    //使用匿名内部类
    new Thread(){
    	@Override
    	public void run() {
    		System.out.println("A");
    	}
    }.start();
    
    //使用Lambda表达式写法
    new Thread(() -> System.out.println("A")).start();
    

二,函数式接口

  1. 概念:只有一个待实现方法的接口,就叫做函数式接口

  2. **判断:**使用@FunctionalInterface去断言这个接口是函数式接口

    @FunctionalInterface
    interface Fly{
         void fly(String name);
    }
    

三,Lambda表达式

  1. 使用:Lambda表达式去简化一个接口的匿名类实现方式,它只能对函数式接口起作用

    (如果一个接口有多个待实现的方法,Lambda表达式就不能分辨出它现在是对接口中哪个方法进行实现)

  2. "->"操作符:Lambda操作符,它将Lambda分为两个部分

  • 左侧:指定了Lambda表达式需要的所有参数
  • 右侧:指定了Lambda体,即Lambda表达式要执行的功能
  1. 特征

    • 可选类型声明:Lambda表达式可以不用声明实现方法的参数类型

      MathOperation addition = (int a, int b) -> a + b; // 类型声明
      MathOperation subtraction = (a, b) -> a - b; // 不用类型声明
      
    • **可选的参数圆括号:**一个参数无需定义圆括号,但没有参数或者多个参数需要定义圆括号

      // 不用括号
      GreetingService greetService1 = message -> System.out.println("Hello " + message);
      // 用括号
      GreetingService greetService2 = (message) -> System.out.println("Hello " + message);
      new Thread(() -> System.out.println("A")).start();
      
    • **可选的大括号:**如果主体包含了多个语句,就需要使用大括号

      // 多条语句不可以省略大括号
      MathOperation multiplication = (int a, int b) -> {
      	int num = a+1;
      	num = a + b;
      	return a * b + num;
      };
      // 单条语句可以省略大括号
      MathOperation division = (int a, int b) -> a / b;
      
    • **可选的返回值:**如果主体只有一个表达式则编译器会自动返回值,此外需要使用return语句

      // 多条语句的Lambda表达式如果有返回值,需要使用return
      MathOperation multiplication = (int a, int b) -> {
      	int num = a+1;
      	num = a + b;
      	return a * b + num;
      };
      // 单条语句可以省略return
      MathOperation division = (int a, int b) -> a / b;
      
  2. 更多用法

    • 为变量赋值

      MathOperation subtraction = (a, b) -> a - b;
      
    • 作为return结果

      MathOperation getOperation(int a, int b){
      	return (a1, b1) -> a+b;
      }
      
    • 作为数组元素

      MathOperation math[] = {
      	(a,b) -> a+b,
      	(a,b) -> a-b,
      	(a,b) -> a*b
      };
      
    • 作为普通方法或构造方法的参数

  3. **Lambda表达式的作用域范围:**Lambda表达式的表达体内,可以访问表达体外的变量,但无法对其进行修改操作

  4. Lambda表达式的引用写法:如果函数式接口的实现恰好可以通过调用一个方法来实现,那么我们可以使用方法引用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值