一文讲明白Lambda,函数式接口,方法引用,Stream流
前言
"What->Why->How"是人类探索学习的思维过程,即心理学的解决过程,本文使用WWW思维过程,和大家学习一下JDK1.8的内容.
Java SE 8.0 / 1.8 Spider(蜘蛛)发布于 2014-03-18 ,现在已经是2021年了,相信还有很多同学不会使用jdk8的新特性,我们公司也是从去年才将jdk1.7升级为jdk 8.没实践过,不会很正常.但jdk1.8是个长期维护的大版本,虽然 JDK 现在已经更新到JDK15了(15.0.2 January 19, 2021 ).但是jdk8的使用率依然占有很大的比例.
话不多说,我们开始吧.
Lambda表达式
What
-
Lambda 一个希腊字母。拉姆达 Λ Lambda(大写Λ,小写λ),是第十一个希腊字母
-
Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。 Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。 使用 Lambda 表达式可以使代码变的更加简洁紧凑。
-
语法
-
//在没有Lambda表达式的时代 //通常使用匿名内部类来实现 new Thread(new Runnable(){ @Override public void run(){ // statement } }) //可以使用lambda简化为 new Thread(()->{ statement}); (parameters) -> expression 或 (parameters) ->{ statements; } 请往下看具体特征
-
-
特征
-
可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
-
可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
-
可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
-
可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需 要指定明表达式返回了一个数值。
-
lambda 表达式只能引用标记了 final 的外层局部变量,这就是说不能在 lambda 内 部修改定义在域外的局部变量,否则会编译错误
-
//1. 不需要参数,返回值为 5 () -> 5 // 2. 接收一个参数(数字类型),返回其 2 倍的值 x -> 2 * x // 3. 接受 2 个参数(数字),并返回他们的差值 (x, y) -> x – y // 4. 接收 2 个 int 型整数,返回他们的和 (int x, int y) -> x + y // 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回 void) (String s) -> System.out.print(s)
-
Why
- Lambda 表达式主要用来定义行内执行的方法类型接口,例如,一个简单方法接口。 在上面例子中,我们使用各种类型的 Lambda 表达式来定义 MathOperation 接口的方法。 然后我们定义了 sayMessage 的执行。 -
- Lambda 表达式免去了使用匿名方法的麻烦,并且给予 Java 简单但是强大的函数化 的编程能力。
How
Talk is cheap,Show me the Code!
public class LambdaTest {
/**
* 首先定义一个接口 字符串消费者
* <p>
* 只有一个方法,消费字符串
*/
@FunctionalInterface
interface StringComsumer {
/**
* 消费字符串
*
* @param string
*/
void consumeString(String string);
}
public static void main(String[] args) {
//要被消费的字符串
final String helloWorld = "Hello World!!!";