Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
apachecn-java-zh
提交
d58bc898
A
apachecn-java-zh
项目概览
OpenDocCN
/
apachecn-java-zh
9 个月 前同步成功
通知
5
Star
53
Fork
13
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
apachecn-java-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
d58bc898
编写于
10月 01, 2021
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2021-10-01 23:08:30
上级
169b8762
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
9 addition
and
9 deletion
+9
-9
docs/high-perform-app-java9/5.md
docs/high-perform-app-java9/5.md
+9
-9
未找到文件。
docs/high-perform-app-java9/5.md
浏览文件 @
d58bc898
...
...
@@ -10,7 +10,7 @@
*
一种新的堆栈遍历 API,用于以编程方式分析堆栈跟踪,以便应用自动更正
*
创建紧凑的、不可修改的集合实例的新的方便的静态工厂方法
*
新的
`CompletableFuture`
类作为访问异步处理结果的方式
*
JDK 9
stream
API 的改进可以加快处理速度,同时提高代码的可读性
*
JDK 9
流
API 的改进可以加快处理速度,同时提高代码的可读性
# 过滤流
...
...
@@ -699,7 +699,7 @@ Set<String> immutableSet =
.
asList
(
"Life"
,
"is"
,
"good!"
)));
```
或者,如果
streams
是您的朋友,您可以编写以下内容:
或者,如果
流
是您的朋友,您可以编写以下内容:
```
java
Set
<
String
>
immutableSet
=
Stream
.
of
(
"Life"
,
"is"
,
"good!"
)
...
...
@@ -881,7 +881,7 @@ System.out.println("\n");
![
Why New Factory Methods?
](
img/05_29.jpg
)
如果您没有在 Java9 中使用过集合,您可能会惊讶地看到输出中集合元素的顺序异常混乱。事实上,这是 JDK9 中引入的
set 和 maps
的另一个新特性。在过去,
`Set`
和
`Map`
实现不能保证保持元素的顺序。但通常情况下,顺序被保留下来,一些程序员编写了依赖于它的代码,从而在应用程序中引入了令人烦恼的不一致且不容易复制的缺陷。新的
`Set`
和
`Map`
实现更频繁地改变顺序,如果不是在每次新的代码运行时。这样,它在开发的早期就暴露了潜在的缺陷,并减少了其进入生产的机会。
如果您没有在 Java9 中使用过集合,您可能会惊讶地看到输出中集合元素的顺序异常混乱。事实上,这是 JDK9 中引入的
集合和映射
的另一个新特性。在过去,
`Set`
和
`Map`
实现不能保证保持元素的顺序。但通常情况下,顺序被保留下来,一些程序员编写了依赖于它的代码,从而在应用程序中引入了令人烦恼的不一致且不容易复制的缺陷。新的
`Set`
和
`Map`
实现更频繁地改变顺序,如果不是在每次新的代码运行时。这样,它在开发的早期就暴露了潜在的缺陷,并减少了其进入生产的机会。
与列表类似,即使不使用 Java9 新的不可变集工厂,我们也可以创建不可变集。一种方法如下:
...
...
@@ -1034,7 +1034,7 @@ List<String> immutableList =
immutableList
.
stream
().
forEach
(
System
.
out
::
print
);
```
从前面的代码注释中可以看到,新的
factory
方法不允许将
`null`
包含为列表值。
从前面的代码注释中可以看到,新的
工厂
方法不允许将
`null`
包含为列表值。
`immutableSet`
创建看起来与此类似:
...
...
@@ -1074,7 +1074,7 @@ immutableMap3.values().stream().forEach(System.out::print);
System
.
out
.
println
(
"\n"
);
```
如果我们运行前面所有使用新
factory
方法的示例,则输出如下:
如果我们运行前面所有使用新
工厂
方法的示例,则输出如下:
![
The New Factory Methods in Action
](
img/05_33.jpg
)
...
...
@@ -1150,10 +1150,10 @@ thenApply(Function<T,U> fn)
thenAccept
(
Consumer
<
T
>
action
)
```
它们都返回
`CompletableFuture`
,携带函数或
void
的结果(在
`Runnable`
和
`Consumer`
的情况下)。它们中的每一个都有两个异步执行相同函数的伴随方法。例如,让我们以
`thenRun(Runnable action)`
方法为例。以下是它的同伴:
它们都返回
`CompletableFuture`
,携带函数或
`void`
的结果(在
`Runnable`
和
`Consumer`
的情况下)。它们中的每一个都有两个异步执行相同函数的伴随方法。例如,让我们以
`thenRun(Runnable action)`
方法为例。以下是它的同伴:
*
`thenRunAsync(Runnable action)`
方法,在默认
`ForkJoinPool.commonPool()`
池的另一个线程中运行该操作
*
`thenRun(Runnable action, Executor executor)`
方法,它在作为参数
executor
传入的池中的另一个线程中运行操作
*
`thenRun(Runnable action, Executor executor)`
方法,它在作为参数
`executor`
传入的池中的另一个线程中运行操作
至此,我们已经介绍了
`CompletionStage`
接口的九种方法。
...
...
@@ -1180,7 +1180,7 @@ whenComplete(BiConsumer<T,Throwable> action)
稍后我们将看到这些方法的使用示例。当链中的某个方法引发异常时,将跳过链中其他所有方法,直到遇到第一个
`handle()`
方法或
`whenComplete()`
为止。如果链中没有这两个方法,那么异常将像任何其他 Java 异常一样冒泡。这两种方法也有异步伙伴,这意味着我们已经讨论了 36 种(38 种)方法的
`CompletionStage`
接口。
还有一种方法只处理异常(类似于传统编程中的
catch
块):
还有一种方法只处理异常(类似于传统编程中的
`catch`
块):
```
java
exceptionally
(
Function
<
Throwable
,
T
>
fn
)
...
...
@@ -1694,7 +1694,7 @@ String result =
System
.
out
.
println
(
"Iterate: "
+
result
);
```
请注意,
stream
元素的类型不需要是整数。它可以是源代码生成的任何类型。因此,新的
`iterate()`
方法可用于提供终止任何类型数据流的标准。
请注意,
流
元素的类型不需要是整数。它可以是源代码生成的任何类型。因此,新的
`iterate()`
方法可用于提供终止任何类型数据流的标准。
# 总结
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录