[{"createTime":1735734952000,"id":1,"img":"hwy_ms_500_252.jpeg","link":"https://activity.huaweicloud.com/cps.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=201905","name":"华为云秒杀","status":9,"txt":"华为云38元秒杀","type":1,"updateTime":1735747411000,"userId":3},{"createTime":1736173885000,"id":2,"img":"txy_480_300.png","link":"https://cloud.tencent.com/act/cps/redirect?redirect=1077&cps_key=edb15096bfff75effaaa8c8bb66138bd&from=console","name":"腾讯云秒杀","status":9,"txt":"腾讯云限量秒杀","type":1,"updateTime":1736173885000,"userId":3},{"createTime":1736177492000,"id":3,"img":"aly_251_140.png","link":"https://www.aliyun.com/minisite/goods?userCode=pwp8kmv3","memo":"","name":"阿里云","status":9,"txt":"阿里云2折起","type":1,"updateTime":1736177492000,"userId":3},{"createTime":1735660800000,"id":4,"img":"vultr_560_300.png","link":"https://www.vultr.com/?ref=9603742-8H","name":"Vultr","status":9,"txt":"Vultr送$100","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":5,"img":"jdy_663_320.jpg","link":"https://3.cn/2ay1-e5t","name":"京东云","status":9,"txt":"京东云特惠专区","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":6,"img":"new_ads.png","link":"https://www.iodraw.com/ads","name":"发布广告","status":9,"txt":"发布广告","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":7,"img":"yun_910_50.png","link":"https://activity.huaweicloud.com/discount_area_v5/index.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=aXhpYW95YW5nOA===&utm_medium=cps&utm_campaign=201905","name":"底部","status":9,"txt":"高性能云服务器2折起","type":2,"updateTime":1735660800000,"userId":3}]
1、前言
Lambda 表达式是一个匿名函数,有些类似与 JavaScript 中的闭包,把一个函数当作参数一样传递,
使用它设计的代码会更加简洁、更加灵活。许多主流语言,如 Java、C#、C++、Python 都支持 Lambda 表达式。
2、Lambda 表达式语法
lambda 表达式的语法格式如下:
(parameters) -> expression 或者 (parameters) ->{ statements; }
其中 -> 是 Lambda 表达式中新引入的语法操作符,称做 Lambda 操作符或箭头操作符,它将 Lambda 表达式分为
左右两个部分。
左侧:指定 Lambda 表达式需要的所有参数
右侧:指定 Lambda 体,即 Lambda 表达式要执行的功能
2.1、举个例子
* 使用匿名内部类的方式创建 Runnable 接口实现。 Runnable r1 = new Runnable(){ @Override public
void run(){ System.out.println("匿名内部类方式"); } };
* 使用 Lambda Runnable r2 = () -> System.out.println("Lambda方式一"); 或者 Runnable
r3 = () -> {System.out.println("Lambda方式二");};
2.2、语法格式
格式一:无参、无返回值,最简单。
Runnable r2 = () -> System.out.println("Lambda格式一");
格式二:一个参数、无返回值。
Consumer<String> con = (p) -> System.out.printf(p);
格式三:一个参数时,小括号可省略
Consumer<String> con = p -> System.out.printf(p);
格式四:多个参数,有返回值
Comparator<Integer> com = (x, y) -> { System.out.println("多个参数,有返回值"); return
Integer.compare(x,y); };
格式五:当 Lambda 体中只有一句代码,return 和{}都可省略
Comparator<Integer> com2 = (x, y) -> Integer.compare(x,y);
格式六:设置参数的数据类型
Comparator<Integer> com = (Integer x,Integer y) -> {
System.out.println("多个参数,有返回值"); return Integer.compare(x,y); }; 或者
Comparator<Integer> com2 = (Integer x,Integer y) -> Integer.compare(x,y);
2.3、类型推断
我们会发现格式六就是在其它格式基础之上,再加上对应的数据类型,那为什么格式 1-5 不用加数据类型呢?
这就要说到 Lambda 表达式中编译器为我们多做的一个步骤:
编译器根据程序上下文,在后台推断出了参数类型,Lambda 表达式参数类型依赖于上下文环境,于是编译器帮咱们推断出来,是不是很赞!
你学会了么?