干货:教你在Java 8中使用Lambda表达式

您还没掌握Java 8中新的lambda表达式么?本文将帮助您了解如何让lambda表达式正常运行。

lambda表达式是什么?他们是如何工作的?

Shivshankar Pal为了理解什么是lambda表达式,搜索了大量的帖子和YouTube视频,在lambda表达式之前他没有使用过任何函数式语言,因此最后他发现还是很难理解lambda表达式。最终,他决定写一篇文章来帮助像他一样的人。

先来看一些lambda表达式语法:

1.(int a,int b) – > {return a + b; }

A. 具有两个参数的功能。

B. (a,b) – > {return a + b; }的工作原理也是一样的。

2.() – > System.out.println(“Hello World”);

A.没有参数的功能。

3.(String s) – > {System.out.println(s); }

A. 具有一个参数的功能。

4.(s) – > System.out.println(s);

A. 不需要指定参数的类型。

B. 单个语句不需要大括号。

5.() – > 42

6.() – > {return 3.1415};

相信一些程序员会在看完这些语法之后,已经在使用lambda表达式语法来编写一个“hello world”了,如下所示:

《干货:教你在Java 8中使用Lambda表达式》
《干货:教你在Java 8中使用Lambda表达式》

然后Shivshankar Pal发现:“我们只能使用有Functional接口的lambda表达式”。

那么什么是函数接口?为什么它对lambda表达式很重要?

功能接口:功能接口是一个具有单一抽象方法的接口。

例如:

《干货:教你在Java 8中使用Lambda表达式》
《干货:教你在Java 8中使用Lambda表达式》

你可以看到上面的接口只有一个方法,所以它是一个功能接口。

现在再来尝试编写程序“hello world”。

这是一个在lambda表达式之前的旧方法:

《干货:教你在Java 8中使用Lambda表达式》
《干货:教你在Java 8中使用Lambda表达式》

《干货:教你在Java 8中使用Lambda表达式》
《干货:教你在Java 8中使用Lambda表达式》

现在来看lambda表达式的方法:

《干货:教你在Java 8中使用Lambda表达式》
《干货:教你在Java 8中使用Lambda表达式》

比较编写相同代码的不同方法,您就可以正确理解lambda能为您做的事。现在有些人已经开始思考或者会问一个问题,为什么他需要一个功能借口来工作?

这就意味着只要我们想使用lambda表达式做任何事情,都需要先创建一个功能接口。API开发人员已经提供了许多通用的功能接口。这些接口位于java.util.function中。

让我们来看看java.util.function包,例:

《干货:教你在Java 8中使用Lambda表达式》
《干货:教你在Java 8中使用Lambda表达式》

可以在上面的例子中看到:

1. 导入 – >我们已经导入了功能包。

2. 在主方法中,我们创建了一个带有两个泛型类型接口的引用变量。

3. 这个接口有一个抽象方法,可接受两个参数,并没有任何返回。

带线程的Lambda表达式

注意:我们都知道一个“Runnable”接口只有一个 “run()” 方法。因此它也是一个功能接口,可以和lambda表达式一起使用。

例1:使用线程类型1:

《干货:教你在Java 8中使用Lambda表达式》
《干货:教你在Java 8中使用Lambda表达式》

用lambda表达式来做:

《干货:教你在Java 8中使用Lambda表达式》
《干货:教你在Java 8中使用Lambda表达式》

例2:使用线程类型2:

《干货:教你在Java 8中使用Lambda表达式》
《干货:教你在Java 8中使用Lambda表达式》

用lambda表达式来做:

《干货:教你在Java 8中使用Lambda表达式》
《干货:教你在Java 8中使用Lambda表达式》

从比较可以看出来,lambda使这些东西变得更简单。

lambda表达式可以为我们做:

1. 可以定义匿名函数

2. 可以分配给一个变量

3. 可以传递给函数

4. 可以从函数返回

    原文作者:IT168企业级
    原文地址: https://zhuanlan.zhihu.com/p/31017297
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞