定义:
函数式接口是接口中只有一个抽象方法的接口。(
函数式接口可以使用 @FunctionalInterface 修饰
这个注解用来验证 此接口是否是函数式接口;
)
lambda表达式就相当于这个函数式接口的实现类的对象(他的本质就是一个匿名内部类)
当然lambda表达式必须依靠函数式接口
格式:
符号 -> 箭头符号:
左侧·:lambda参数列表(接口函数的参数列表)
右侧:lambda表达式所需执行的功能 即 lambda体
例子:
无参,无返回值
()-> System.out.println("Hello Lambda");
public class TestLambda {
@Test
Runnable r=new Runnable(){
@Override
public void run(){
System.out.println("Hello word")
}
}
r.run();
}
public class TestLambda {
@Test
Runnable r=()-> System.out.println("hello word");
r.run();
}
有一个参数,无返回值:(若lambda 只有一个参数,小括号可以不写。)
//函数接口接口
public interface Consumer<T>{
void accept(T t);
}
//具体使用
@Test
public void test2(){
Consumer<String> con=(x)->System.out.println(x);
con.accept("我ssssss");
}
有两个以上的参数,并且lambda体中有多条语句
@Test
public void test3()
{
Comparator<Integer> com=(x,y)->{
System.out.println("函数接口");
return Integer.compare(x,y);
};
}
如果lambda体中只有一条语句,大括号,return 可以省略
@Test
public void test3()
{
Comparator<Integer> com=(x,y)->Integer.compare(x,y);
}
lambda表达式参数列表的数据类型可以不写,因为JVM编译器可以根据上下文推断出数据类型,即类型推断
总结:
上联:左右遇一括号省
下联:左侧推断类型省
横批:能省则省
----------尚硅谷某东北教师
右侧表达式只有一个return ,“return ”可以省;
二、lambda 需要函数式接口的支持