目录
1. lambda表达式的概念:
lambda表达式是Java8的一个新特性,可以简化我们的代码编程;
从本质上来说,lambda表达式是一个匿名函数,使用它能简化我们对接口代码的实现;
2.函数式接口 —- 基础概念
1.一个接口中,要求实现类必须实现的抽象方法,有且只有一个,这样的接口就是函数式接口
2.这里的有且只有一个的抽象函数的方法不包括,toString方法,static修饰的静态方法以及default修饰的方法。
2.1.函数式接口案例示范
@FunctionalInterface
interface Test{
void test();
static void test1(){};
default void test2(){};
String toString();
}
上面这个接口示范虽然有很多方法,但是这是一个函数式接口,原因如下
1.toString方法在实现类中实现接口的时候,toString可以不重写!直接能从父类Object中继承到!
2.static修饰的静态方法有方法体,可以不用实现类实现
3.default修饰的方法也是有方法体,也是不是必须实现的方法
这里的@FunctionalInterface注解是判断这个接口是不是函数式接口
如果是函数式接口没有任何问题,如果不是函数式接口这个注解就会有红线下划线进行提示。其功能类似与@Override
3.lambda表达式
1.因为lambda表达式本质上来说是一个匿名函数,所以我们在写lambda表达式的时候不用关系方法名是什么,也不用关心返回值是什么,我们只需要关心:参数和方法体;
2.lambda表达式的基础语法:
(参数) -> {
方法体
}
3.参数部分:方法的参数部分,要求和实现的接口中的方法参数部分一致,包括参数的数量和类型。
4.方法体部分:方法的实现部分,如果在接口中定义的方法有返回值,则在实现的时候,注意返回值的返回
3.1.lambda表达式案例示范
3.1.1.无参无返回值
public interface Demo {
void demo();
}
3.1.2.无参有返回值
public interface Demo2 {
void demo(int a);
}
3.1.3.有返回值无参
public interface Demo3 {
int demo3();
}
3.1.4.有返回值有参数
public interface Demo4 {
int demo4(int a);
}
3.1.5.多个参数有返回值
public interface Demo5 {
int demo5(int a,int b);
}
3.1.6.方法实现:
public class Main {
public static void main(String[] args) {
//demo 无参无返回值
Demo demo = () -> {
System.out.println("无参无返回值的接口");
};
demo.demo();
//无参有返回值
Demo2 demo2 = (int a) -> {
System.out.println("有参无返回值的接口" + a);
};
demo2.demo(10);
//有返回值无参
Demo3 demo3 = () -> {
System.out.println("无参有返回值的接口");
return 10;
};
int i = demo3.demo3();
System.out.println(i);
//有返回值有参数
Demo4 demo4 = (int a) -> {
System.out.println("有返回值有参数的接口" + a);
return a;
};
int i1 = demo4.demo4(20);
System.out.println(i1);
//多个参数有返回值
Demo5 demo5 = (int a, int b) -> {
int c = a + b;
System.out.println("多个参数有返回值的接口:a+b=" + c);
return c;
};
int i2 = demo5.demo5(10, 20);
System.out.println(i2);
}
}
3.2.lambda表达式的精简
3.2.1.参数部分的精简
参数的类型可以省略,注意:如果要省略就全部省略,如果不省略就全部不要省略,不用一个省略一个不省略;
public class Test01 {
public static void main(String[] args) {
Demo5 demo5 = (a,c) ->{
if (a>c){
return a-c;
}else if (a<c){
return c-a;
}else {
return a+c;
}
};
int i = demo5.demo5(10, 10);
System.out.println(i);
}
}
如果只有一个参数的情况下可以把小括号去掉,但是如果没有参数不能省略小括号
Demo4 demo4 = a ->{
return a;
};
demo4.demo4(10);
}
3.2.3方法体的精简:
方法体的大括号的省略:如果方法体中有且只有一条语句,可以省略大括号。
Demo demo = () ->
System.out.println("可以省略大括号");
demo.demo();
如果方法体中有且只有一条语句,但是如果这条语句是return返回语句,那么return关键字也可以不用写
Demo4 demo4 = a -> a;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/105068.html