①定义:一个可传递的代码块,可以在以后执行一次或多次。可以用一种精巧而简洁的方式表示使用回调或变量行为的代码。
简而言之,就是将一块代码赋值给一个Java变量
将这个代码
BlockCode=public void do(String s){System.out.println(s);}
{
I.public多余
II.函数名字(do)多余,因为已经写了方法体并赋值给BlockCode了
III.void多余,编译器可以自己判断返回的类型
IV.String多余,编译器可以自己判断参数类型
V.只有一行可以不用大括号
}
转换成
BlockCode=(s)->System.out.println(s);
②函数式接口:对于有且只有一个抽象方法(只有声明,没有具体方法体的方法)的接口,需要这种接口的对象时,就可以提供一个lambda表达式。这种接口叫做函数式接口
而上文中提到的BlockCode=(s)->System.out.println(s);
还要对BlockCode=(s)->System.out.println(s);中的BlockCode加上类型
就需要另加入一段代码
@FunctionalInterface //函数式接口声明
//函数式接口声明
interface LambdaInterface{
void do(String s);
}LambdaInterface{
void do(String s);
}
这种只有一个接口函数(do(String s))的接口,就叫做“函数式接口”,为了防止以后的人在这个接口中增加接口函数导致其有多个接口函数需要被实现,变成“非函数接口”,可以在上面增加一个声明@FunctionalInterface,这样就可以防止别人添加新的接口函数了
有了函数式接口之后就得到了一个完整的Lambda表达式声明了:
LambdaInterface BlockCode=(s)->System.out.println(s); BlockCode=(s)->System.out.println(s);
③作用:最主要的作用就是让代码变得简洁(Java8是实现了Lambda表达式的版本)

④语法:参数、箭头(->)以及一个表达式
(String first,String second)->
{
if(first.length()<second.length())return -1;
else if (first.length()>second.length())return 1;
else return 0;
}
即使没有参数也要提供空括号(同无参方法)
()->{for (int i =100;i>=0;i--)System.out.println(i);}
如果参数类型可以被推导出来,就可以省略其类型
Comparator<String> comp=(first,second)->first.length()-second.length();
如果只有一个参数,而且这个参数的类型可以推导得出,就可以省略小括号
ActionListener listener=event->System.out.println("The time is "+new Date()); //等同于(ActionEvent event)->…………
如果lambda表达式只在某些分支返回一个值,而在另外一些分支不返回值,就不合法
不合法:
(int x)->{if(x>=0)return 1;}
本文深入探讨Java Lambda表达式的基本概念,包括定义、语法特点、函数式接口的应用及Lambda表达式如何简化代码。同时,文章提供了多个实例,帮助读者理解Lambda表达式的实际用法。
1081

被折叠的 条评论
为什么被折叠?



