【自学java笔记#第二十六天#】原来Lambda表达式和接口是这种关系

选用教材:《Java核心技术卷一》

第六章 接口、Lambda表达式与内部类

强烈建议所有需要学习Lambda表达式的朋友们,在看书之前,先看看千峰的视频:

https://www.bilibili.com/video/BV164411E7Ny?p=11

自己看书的话,很容易被逻辑绕进去。

一、Lambda表达式的基本语法

1、例:(String a,Stringb)->{return a.length-b.length;};

()里放的是参数列表;

->是Lambda运算符,读作goes to;

{}里是表达式的主体部分,用来执行一些逻辑语句及返回语句。

2、Lambda表达式的精简版本:

①()里的参数,若有2个及以上,则可以省略掉前面的类型。但是一定要全部省略,不能一个参数省了类型,另一个参数没省。

②{}里若只有一条返回语句,那么可以把大括号省略掉。

③在第②条的基础上,还可以把return语句的return关键字也省略掉。

④若()里只有一个参数,那么不仅前面的类型可以省略,小括号也可以去掉不要。

二、Lambda表达式与接口的关系(主观)

前面讲接口的那些章节,基本是在强调:要想调用接口里的方法,那么类就必须先实现这个接口。

而学了Lambda表达式之后,感觉这个实现接口的过程被简化了。

归根结底,是因为Java是一种强类型语言。

就拿比较常见的sort排序方法来说,不是任何一个Object类对象都可以调用这个方法的。

很多都需要通过接口来将类对象转换成sort方法需要的对象。Lambda表达式就直接把实现接口的过程给省略掉了。

三、函数式接口

即能接收Lambda表达式的接口。

常用的有以下4个:

1、Supplier<T>;

2、Consumer<T>;

3、Fuction<T,R>;

4、Predicate<T>

四、方法引用

1、基本语法:方法的隶属者::方法

例:System.out::println

静态方法的隶属者是类,其他方法的隶属者是对象。

2、不是所有的Lambda表达式都能写成方法引用的形式。

例如:s->s.length()==0

不仅调用了方法,还进行了判断。当且仅当Lambda表达式只调用了一个方法而不做其他操作时,才能重写为方法引用的形式。

3、构造器引用的基本语法

例:Person[] people=Steam.toArray(Person[]::new);

调用了Person类的构造器,并创建了一个实例。

五、Lambda表达式和接口的高级组合用法

例:static Supplier<Integer>getNumber()

{   

int num=10;

return()->{return num;};

}

猜你喜欢

转载自www.cnblogs.com/yizhinailu/p/12609116.html