Lambda表达式详解

Lambda 简介

Lambda表达式,也可以成为闭包。
Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

Lambda对接口的要求

不是所有的接口都可以使用Lambda表达式来实现。
接口中只能有一个必须被实现的方法(抽象方法)。

注解 @FunctionalInterface

用于约束接口内抽象方法的个数,要求接口中的抽象方法只有一个。这个注解一般会和lambda表达式一起使用。

加上这个注解后,如果接口内有两个抽象方法则会报错。

Lambda基础语法

语法形式为 () -> {}, **()用来描述参数列表,{}**用来描述方法体,->为lambda运算符。

下面介绍几个具体的例子。

case 1: 无参数无返回值
  1. 首先定义一个接口,其中包含一个无参无返回值方法method。
@FunctionalInterface
public interface NoReturnNoParam {
    void method(); //定义抽象方法method
}
  1. 然后在主函数中用匿名内部类的方式实现。
public class Main {

    public static void main(String[] args) {
    //匿名内部类
        NoReturnNoParam noReturnNoParam = new NoReturnNoParam() {
            //重写接口中的抽象方法method
            @Override
            public void method() {
                System.out.println("无参数无返回值方法");
            }
        };
		//调用被重写的方法
        noReturnNoParam.method();
    }
}
  1. 用lambda表达式简化上面的例子。
public class Main {

    public static void main(String[] args) {
        
        //用lambda表达式重写该方法
        NoReturnNoParam noReturnNoParam =() ->{
            System.out.println("无参数无返回值方法");
        };
        //调用被重写的方法
        noReturnNoParam.method();
    }
}
case 2: 1个参数无返回值

同理我们可以依照上面的方式定义一个有参无返回值接口。

  1. 定义接口
@FunctionalInterface
public interface NorReturnOneParam {

   void method(int a); //有1个 int型参数的抽象方法
}
  1. 用lambda表达式实现
public class Main {

    public static void main(String[] args) {
    //参数定义在()内
        NorReturnOneParam norReturnOneParam = (int a) -> {
            System.out.println("传入的参数等于:"+a);
        };
        //调用被重写的方法
        norReturnOneParam.method(5);
    }
}
case 3: 1个参数有返回值
  1. 定义一个有String类型返回值,int类型参数的接口。
@FunctionalInterface
public interface oneParam {
    String method(int a);
}
  1. 用lambda表达式调用该方法
public class Main {

    public static void main(String[] args) {
        oneParam oneParam = (int a)-> {
            return "传入的参数等于:"+a;
        };

        //打印返回的String类型
        System.out.println(oneParam.method(6));
    }
}
Lambda表达式再简化
  1. 简化参数类型,但必须所有参数都不写
//简化前, a前有int类型修饰
NorReturnOneParam norReturnOneParam = (int a) -> {
            System.out.println("传入的参数等于:"+a);
        };

//简化后
NorReturnOneParam norReturnOneParam = (a) -> {
            System.out.println("传入的参数等于:"+a);
        };
  1. 简化参数小括号
NorReturnOneParam norReturnOneParam = a -> {
            System.out.println("传入的参数等于:"+a);
        };
  1. 简化参数大括号如果方法只有一条语句
NorReturnOneParam norReturnOneParam = a -> 
            System.out.println("传入的参数等于:"+a);
  1. 简化return
//简化前
oneParam oneParam = (int a)-> {
            return "传入的参数等于:"+a;
        };

//简化后
oneParam oneParam = a-> "传入的参数等于:"+a;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值