Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
beginnersbook-zh
提交
e0c4ef1f
B
beginnersbook-zh
项目概览
OpenDocCN
/
beginnersbook-zh
10 个月 前同步成功
通知
0
Star
107
Fork
30
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
B
beginnersbook-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
e0c4ef1f
编写于
10月 07, 2019
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2019-10-07 17:48:32
上级
0f130b6d
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
29 addition
and
28 deletion
+29
-28
docs/java/59.md
docs/java/59.md
+8
-8
docs/java/60.md
docs/java/60.md
+8
-8
docs/java/61.md
docs/java/61.md
+12
-11
docs/java/SUMMARY.md
docs/java/SUMMARY.md
+1
-1
未找到文件。
docs/java/59.md
浏览文件 @
e0c4ef1f
...
...
@@ -2,11 +2,11 @@
> 原文: [https://beginnersbook.com/2017/10/java-lambda-expressions-tutorial-with-examples/](https://beginnersbook.com/2017/10/java-lambda-expressions-tutorial-with-examples/)
Lambda 表达式是 Java 8 中引入的一个新特性
.λ
表达式是一个匿名函数。一个没有名称且不属于任何类的函数。 lambda 表达式的概念最初是在 LISP 编程语言中引入的。
Lambda 表达式是 Java 8 中引入的一个新特性
。λ
表达式是一个匿名函数。一个没有名称且不属于任何类的函数。 lambda 表达式的概念最初是在 LISP 编程语言中引入的。
## Java Lambda 表达式语法
要创建 lambda 表达式,我们在 lambda 运算符
的左侧指定输入参数(如果有的话) -
>
,并将表达式或语句块放在 lambda 运算符的右侧。例如,lambda 表达式(x,y) -
>
x + y 指定 lambda 表达式接受两个参数 x 和 y
并返回这些参数的总和。
要创建 lambda 表达式,我们在 lambda 运算符
`->`
的左侧指定输入参数(如果有的话),并将表达式或语句块放在 lambda 运算符的右侧。例如,lambda 表达式
`(x, y) -> x + y`
指定 lambda 表达式接受两个参数
`x`
和
`y`
并返回这些参数的总和。
```
java
//Syntax of lambda expression
...
...
@@ -25,21 +25,21 @@ Java 中的 lambda 表达式具有以下主要部分:
Lambda 表达式
**仅具有主体和参数列表**
。
1
\.
**没有**
名称 - 函数是匿名的,所以我们不关心名称
2.
参数列表
3
\.
Body
- 这是函数的主要部分。
3
\.
正文
- 这是函数的主要部分。
4
\.
**没有**
返回类型 - java 8 编译器能够通过检查代码来推断返回类型。你不必明确提及它。
## 在 Java 中使用 Lambdas 的位置
要使用 lambda 表达式,您需要创建自己的
功能接口或使用 Java 提供的预定义功能接口。只有单个抽象方法的
**接口称为功能接口(或单抽象方法接口),例如:Runnable,callable,ActionListener 等。**
要使用 lambda 表达式,您需要创建自己的
函数式接口或使用 Java 提供的预定义函数式接口。只有单个抽象方法的接口称为函数式接口(或单抽象方法接口),例如:
`Runnable`
,
`callable,ActionListener`
等。
**使用
功能
接口:**
**使用
函数式
接口:**
Pre Java 8
:我们创建匿名内部类。
Post Java 8
:您可以使用 lambda 表达式而不是匿名内部类。
Java 8 之前
:我们创建匿名内部类。
Java 8 之后
:您可以使用 lambda 表达式而不是匿名内部类。
## Java Lambda 表达式示例
**不使用 Lambda 表达式:**
在 java 8 之前,我们使用匿名内部
classe 来实现功能
接口的唯一抽象方法。
**不使用 Lambda 表达式:**
在 java 8 之前,我们使用匿名内部
类来实现函数式
接口的唯一抽象方法。
```
java
import
java.awt.*
;
...
...
docs/java/60.md
浏览文件 @
e0c4ef1f
...
...
@@ -2,8 +2,8 @@
> 原文: [https://beginnersbook.com/2017/10/method-references-in-java-8/](https://beginnersbook.com/2017/10/method-references-in-java-8/)
在上一个教程中,我们在 Java 8 中学习了
[
lambda 表达式。这里我们将讨论 java 8 的另一个新特性,**方法引用**。方法引用是用于调用方法的 lambda 表达式的简写表示法。例如:
如果你的 lambda 表达式是这样的:
](
https://beginnersbook.com/2017/10/java-lambda-expressions-tutorial-with-examples/
)
在上一个教程中,我们在 Java 8 中学习了
[
lambda 表达式
](
https://beginnersbook.com/2017/10/java-lambda-expressions-tutorial-with-examples/
)
。这里我们将讨论 java 8 的另一个新特性,
**方法引用**
。方法引用是用于调用方法的 lambda 表达式的简写表示法。例如:
如果你的 lambda 表达式是这样的:
```
java
str
->
System
.
out
.
println
(
str
)
...
...
@@ -15,14 +15,14 @@ str -> System.out.println(str)
System
.
out
::
println
```
::
运算符用于方法引用,以将类或对象与方法名称分开(我们将在示例的帮助下学习)。
`::`
运算符用于方法引用,以将类或对象与方法名称分开(我们将在示例的帮助下学习)。
## 四种方法引用
1.
对象的实例方法的方法引用 -
object :: instanceMethod
2.
对类的静态方法的方法引用 - 类:: staticMethod
3.
对任意对象的实例方法的方法引用特定类型的类 - Class :: instanceMethod
4.
对构造函数的方法引用 - Class :: new
1.
对象的实例方法的方法引用 -
`object::instanceMethod`
2.
类的静态方法的方法引用 -
`class::staticMethod`
3.
特定类的任意对象的实例方法的方法引用 -
`Class::instanceMethod`
4.
构造函数的方法引用 -
`Class::new`
## 1.方法引用:对象的实例方法
...
...
@@ -106,7 +106,7 @@ Sansa
Steve
```
## 4.
对
构造函数的方法引用
## 4.构造函数的方法引用
```
java
@FunctionalInterface
...
...
docs/java/61.md
浏览文件 @
e0c4ef1f
# Java 函数接口
# Java 函数
式
接口
> 原文: [https://beginnersbook.com/2017/10/java-functional-interfaces/](https://beginnersbook.com/2017/10/java-functional-interfaces/)
只有单个抽象方法的
**接口称为函数
接口。您可以使用 Java 提供的预定义函数接口,也可以创建自己的函数接口并使用它。您可以在这里检查预定义的函数接口:[预定义的函数
接口](https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html)它们都只有一个抽象方法。这就是原因,它们也被称为单抽象方法接口(SAM 接口)。**
只有单个抽象方法的
**接口称为函数
式接口。您可以使用 Java 提供的预定义函数式接口,也可以创建自己的函数式接口并使用它。您可以在这里检查预定义的函数式接口:[预定义的函数式
接口](https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html)它们都只有一个抽象方法。这就是原因,它们也被称为单抽象方法接口(SAM 接口)。**
要在 Java 中使用
[
lambda 表达式,您需要创建自己的函数
接口或使用 Java 提供的预定义函数接口。在创建自己的函数接口时,用 **@FunctionalInterface** 注释标记它,这个注释是在 Java 8 中引入的。尽管它是可选的,你应该使用它,这样如果你用这个标记的接口就会出现编译错误注释不遵循函数
接口的规则。
](
https://beginnersbook.com/2017/10/java-lambda-expressions-tutorial-with-examples/
)
要在 Java 中使用
[
lambda 表达式,您需要创建自己的函数
式接口或使用 Java 提供的预定义函数式接口。在创建自己的函数式接口时,用`@FunctionalInterface`注解标记它,这个注解是在 Java 8 中引入的。尽管它是可选的,你应该使用它,这样如果你用这个标记的接口就会出现编译错误注解不遵循函数式
接口的规则。
](
https://beginnersbook.com/2017/10/java-lambda-expressions-tutorial-with-examples/
)
## 定义函数接口的规则是什么?
## 定义函数
式
接口的规则是什么?
函数接口应该有
**只有一个**
抽象方法。除了一个抽象方法,它们还可以包含任意数量的默认和静态方法。
函数
式
接口应该有
**只有一个**
抽象方法。除了一个抽象方法,它们还可以包含任意数量的默认和静态方法。
## 示例 1:创建自己的函数接口
## 示例 1:创建自己的函数
式
接口
```
java
@FunctionalInterface
...
...
@@ -35,7 +35,7 @@ Result: 112
```
## 示例 2:使用预定义的函数接口
## 示例 2:使用预定义的函数
式
接口
```
java
import
java.util.function.IntBinaryOperator
;
...
...
@@ -58,10 +58,11 @@ Result: 112
```
## 函数接口示例:使用匿名内部类 vs 使用 lambda 表达式
## 函数
式
接口示例:使用匿名内部类 vs 使用 lambda 表达式
**我们在 java8**
之前就已经使用了函数接口,它们是通过使用这些接口创建匿名内部类来使用的。你必须已经看过像 Runnable,ActionListener,Comparator 等函数接口。它们都有单一的抽象方法。让我们看一个 ActionListener 的例子,看看它如何与 Anonymous 内部类一起使用,以及如何使用 lambda 表达式实现它。
**ActionListener 示例:在 Java 8 之前:使用匿名内部类**
**我们在 java8**
之前就已经使用了函数式接口,它们是通过使用这些接口创建匿名内部类来使用的。你必须已经看过像
`Runnable`
,
`ActionListener`
,
`Comparator`
等函数式接口。它们都有单一的抽象方法。让我们看一个
`ActionListener`
的例子,看看它如何与
`Anonymous`
内部类一起使用,以及如何使用 lambda 表达式实现它。
**`ActionListener`示例:在 Java 8 之前:使用匿名内部类**
```
java
import
javax.swing.*
;
...
...
@@ -96,7 +97,7 @@ class Example extends JFrame
```
**
ActionListener
示例:Lambda 表达式**
**
`ActionListener`
示例:Lambda 表达式**
```
java
import
javax.swing.*
;
...
...
docs/java/SUMMARY.md
浏览文件 @
e0c4ef1f
...
...
@@ -57,7 +57,7 @@
+
[
Java 8 教程
](
58.md
)
+
[
Java Lambda 表达式教程与示例
](
59.md
)
+
[
Java 8 中的方法参考
](
60.md
)
+
[
Java
功能
接口
](
61.md
)
+
[
Java
函数式
接口
](
61.md
)
+
[
Java 8 Stream 教程
](
62.md
)
+
[
Java 8 Stream Filter 带有示例
](
63.md
)
+
[
Java 8 接口更改 - 默认方法和静态方法
](
64.md
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录