【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,感谢读者的阅读.

你可能感兴趣的:(●【编程语言】,兰姆达表达式,java8新特性)