java8里面的兰姆达表达式_【java8新特性】兰姆达表达式

前言

java8新特性,速度快,代码少,便于并行,强大的streamAPI,最大化减少空指针异常,本篇博客主要总结一下兰姆达表达式.

核心

Why

Lambda是一个匿名函数,我们可以把Lambda表达式理解为一段可以传递的代码(将代码像数据一样进行传递).可以写出更简洁/更灵活的代码.作为一种更紧凑的代码风格,使java的语言表达能力得到了提升.

What

Lambda表达式包含三部分:

1、左边:指定了Lambda表达式需要的所有参数

2、一个箭头符号:->

3、右边指定了Lambda方法体,即Lambda表达式要执行的功能,可以是表达式和代码块。

Grammer

语法格式一:无参数,无返回值

Runnable r1 = () -> System.out.println("Hello");

语法格式二:有一个参数,并且无返回值

Consumer fun = x)->System.out.println(“Hello”);

语法格式三:若只有一个参数,()可以省略不写

Consumer fun = x->System.out.println(“Hello Lambda!”);

语法格式四:有两个以上的参数,有返回值, 并且lambda体中有多条语句

BinaryOperator bo = (x,y) -> {System.out.println("实现函数接口的方法!";

return x + y;)}

语法格式五:若lambda体中只有一条语句,return和{}都可以省略不写

BinaryOperator bo =(x,y) -> x + y;

语法格式六:lambda表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出,数据类型,即“类型推断”

(x , y) -> Integer.compare(x, y);

函数式接口

我们要注意的是:lambda表达式需要“函数式接口”的支持,那么什么是函数式接口呢?

函数式接口:接口只有一个抽象方法的接口,成为函数式接口可以使用注解@FunctionalInterface

四大函数式接口

函数式接口

参数类型

返回类型

用途

Consumer < T>消费型接口

T

void

对类型为T的对象应用操作,包含方法:void accept (T t)

Supplier < T>供给型接口

T

返回类型为T的对象,包含方法:T get();

Function < T,R>函数型接口

T

R

对类型为T的对象应用操作,并返回结果.结果是R类型的对象.包含方法:R apply(T t)

Predicate < T>断定型接口

T

boolean

确定类型为T的对象是否满足某约束,并返回Boolean值.包含方法boolean test(T t)

方法引入与构造器引用

方法引用

当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用!

( 实现抽象方法的参数列表,必须与方法引用方法的参数列表保持一致! )

方法引用:使用操作符 “ ::” 将方法名和对象或类的名字分隔开来。

如下三种主要使用情况:

 对象::实例方法

 类::静态方法

 类::实例方法

例如:

Compare((x,y) - > x.equals(y),”abc”,”abc”);

等同于:

Compare(String::equals,”abc”,”abc”);

注意: 当需要引用方法的第一个参数是调用对象,并且第二个参数是需要引

用方法的第二个参数(或无参数)时: ClassName::methodName

构造器引用

格式: ClassName::new

与函数式接口相结合,自动与函数式接口中方法兼容。

可以把构造器引用赋值给定义的方法,与构造器参数

列表要与接口中抽象方法的参数列表一致!

例如:

Function

数组引用

格式: type[] :: new

例如:

Function

总结

本篇博客就总结到这里了,下一篇咱们继续总结StreamAPI,感谢读者的阅读.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值