mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-06-16 18:10:13 +08:00
[docs update]Java8 新特性实战
This commit is contained in:
parent
86551a416c
commit
ae8766c479
@ -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
|
||||
|
||||
|
@ -93,6 +93,7 @@ export default sidebar({
|
||||
"copyonwritearraylist-source-code",
|
||||
"arrayblockingqueue-source-code",
|
||||
"priorityqueue-source-code",
|
||||
"delayqueue-source-code",
|
||||
],
|
||||
},
|
||||
],
|
||||
|
@ -67,6 +67,8 @@ title: JavaGuide(Java学习&面试指南)
|
||||
- [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
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user