1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00

[docs update]Java8 新特性实战

This commit is contained in:
Guide 2023-08-05 15:55:16 +08:00
parent 86551a416c
commit ae8766c479
4 changed files with 20 additions and 8 deletions

View File

@ -74,6 +74,7 @@
- [CopyOnWriteArrayList 核心源码分析](./docs/java/collection/copyonwritearraylist-source-code.md)
- [ArrayBlockingQueue 核心源码分析](./docs/java/collection/arrayblockingqueue-source-code.md)
- [PriorityQueue 核心源码分析](./docs/java/collection/priorityqueue-source-code.md)
- [DelayQueue 核心源码分析](./docs/java/collection/delayqueue-source-code.md)
### IO

View File

@ -93,6 +93,7 @@ export default sidebar({
"copyonwritearraylist-source-code",
"arrayblockingqueue-source-code",
"priorityqueue-source-code",
"delayqueue-source-code",
],
},
],

View File

@ -67,6 +67,8 @@ title: JavaGuideJava学习&面试指南)
- [LinkedHashMap 核心源码分析](./java/collection/linkedhashmap-source-code.md)
- [CopyOnWriteArrayList 核心源码分析](./java/collection/copyonwritearraylist-source-code.md)
- [ArrayBlockingQueue 核心源码分析](./java/collection/arrayblockingqueue-source-code.md)
- [PriorityQueue 核心源码分析](./java/collection/priorityqueue-source-code.md)
- [DelayQueue 核心源码分析](./java/collection/priorityqueue-source-code.md)
### IO

View File

@ -1,4 +1,9 @@
# Java8 新特性实战
---
title: Java8 新特性实战
category: Java
tag:
- Java新特性
---
> 本文来自[cowbi](https://github.com/cowbi)的投稿~
@ -602,14 +607,13 @@ public static <T> T requireNonNull(T obj) {
`ofNullable` 方法和`of`方法唯一区别就是当 value 为 null 时,`ofNullable` 返回的是`EMPTY`of 会抛出 `NullPointerException` 异常。如果需要把 `NullPointerException` 暴漏出来就用 `of`,否则就用 `ofNullable`
**`map()``flatMap()` 有什么区别的?**
先看一下`map``flatMap``Stream`中的不同。
`map``flatMap` 都是将一个函数应用于集合中的每个元素,但不同的是`map`返回一个新的集合,`flatMap`是将每个元素都映射为一个集合,最后再将这个集合展平。
在实际应用场景中,如果`map`返回的是数组,那么最后得到的是一个二维数组,使用`flatMap`就是为了将这个二维数组展平变成一个一维数组。
```
```java
public class MapAndFlatMapExample {
public static void main(String[] args) {
List<String[]> listOfArrays = Arrays.asList(
@ -635,21 +639,24 @@ public class MapAndFlatMapExample {
}
```
运行结果:
```
Using map:
[[APPLE, BANANA, CHERRY], [ORANGE, GRAPE, PEAR], [KIWI, MELON, PINEAPPLE]]
Using flatMap:
[APPLE, BANANA, CHERRY, ORANGE, GRAPE, PEAR, KIWI, MELON, PINEAPPLE]
```
最简单的理解就是`flatMap()`可以将`map()`的结果展开。
`Optional`里面,当使用`map()`时,如果映射函数返回的是一个普通值,它会将这个值包装在一个新的`Optional`中。而使用`flatMap`时,如果映射函数返回的是一个`Optional`,它会将这个返回的`Optional`展平,不再包装成嵌套的`Optional`
下面是一个对比的示例代码:
```
```java
public static void main(String[] args) {
int userId = 1;
@ -681,6 +688,7 @@ public static void main(String[] args) {
System.out.println("User's city without flatMap: " + cityWithoutFlatMap);
}
```
`Stream``Optional`中正确使用`flatMap`可以减少很多不必要的代码。
### 判断 value 是否为 null