Skip to content

Commit ae8766c

Browse files
committed
[docs update]Java8 新特性实战
1 parent 86551a4 commit ae8766c

File tree

4 files changed

+20
-8
lines changed

4 files changed

+20
-8
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
- [CopyOnWriteArrayList 核心源码分析](./docs/java/collection/copyonwritearraylist-source-code.md)
7575
- [ArrayBlockingQueue 核心源码分析](./docs/java/collection/arrayblockingqueue-source-code.md)
7676
- [PriorityQueue 核心源码分析](./docs/java/collection/priorityqueue-source-code.md)
77+
- [DelayQueue 核心源码分析](./docs/java/collection/delayqueue-source-code.md)
7778

7879
### IO
7980

docs/.vuepress/sidebar/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ export default sidebar({
9393
"copyonwritearraylist-source-code",
9494
"arrayblockingqueue-source-code",
9595
"priorityqueue-source-code",
96+
"delayqueue-source-code",
9697
],
9798
},
9899
],

docs/home.md

+2
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ title: JavaGuide(Java学习&面试指南)
6767
- [LinkedHashMap 核心源码分析](./java/collection/linkedhashmap-source-code.md)
6868
- [CopyOnWriteArrayList 核心源码分析](./java/collection/copyonwritearraylist-source-code.md)
6969
- [ArrayBlockingQueue 核心源码分析](./java/collection/arrayblockingqueue-source-code.md)
70+
- [PriorityQueue 核心源码分析](./java/collection/priorityqueue-source-code.md)
71+
- [DelayQueue 核心源码分析](./java/collection/priorityqueue-source-code.md)
7072

7173
### IO
7274

docs/java/new-features/java8-common-new-features.md

+16-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
# Java8 新特性实战
1+
---
2+
title: Java8 新特性实战
3+
category: Java
4+
tag:
5+
- Java新特性
6+
---
27

38
> 本文来自[cowbi](https://github.com/cowbi)的投稿~
49
@@ -602,14 +607,13 @@ public static <T> T requireNonNull(T obj) {
602607

603608
`ofNullable` 方法和`of`方法唯一区别就是当 value 为 null 时,`ofNullable` 返回的是`EMPTY`,of 会抛出 `NullPointerException` 异常。如果需要把 `NullPointerException` 暴漏出来就用 `of`,否则就用 `ofNullable`。
604609

605-
606610
**`map()` 和 `flatMap()` 有什么区别的?**
607611

608-
先看一下`map`和`flatMap`在`Stream`中的不同。
609612
`map` 和 `flatMap` 都是将一个函数应用于集合中的每个元素,但不同的是`map`返回一个新的集合,`flatMap`是将每个元素都映射为一个集合,最后再将这个集合展平。
610613

611614
在实际应用场景中,如果`map`返回的是数组,那么最后得到的是一个二维数组,使用`flatMap`就是为了将这个二维数组展平变成一个一维数组。
612-
```
615+
616+
```java
613617
public class MapAndFlatMapExample {
614618
public static void main(String[] args) {
615619
List<String[]> listOfArrays = Arrays.asList(
@@ -635,21 +639,24 @@ public class MapAndFlatMapExample {
635639
}
636640

637641
```
642+
638643
运行结果:
644+
639645
```
640646
Using map:
641647
[[APPLE, BANANA, CHERRY], [ORANGE, GRAPE, PEAR], [KIWI, MELON, PINEAPPLE]]
642648

643649
Using flatMap:
644650
[APPLE, BANANA, CHERRY, ORANGE, GRAPE, PEAR, KIWI, MELON, PINEAPPLE]
645-
646651
```
652+
647653
最简单的理解就是`flatMap()`可以将`map()`的结果展开。
648654

649655
在`Optional`里面,当使用`map()`时,如果映射函数返回的是一个普通值,它会将这个值包装在一个新的`Optional`中。而使用`flatMap`时,如果映射函数返回的是一个`Optional`,它会将这个返回的`Optional`展平,不再包装成嵌套的`Optional`。
650656

651657
下面是一个对比的示例代码:
652-
```
658+
659+
```java
653660
public static void main(String[] args) {
654661
int userId = 1;
655662

@@ -681,6 +688,7 @@ public static void main(String[] args) {
681688
System.out.println("User's city without flatMap: " + cityWithoutFlatMap);
682689
}
683690
```
691+
684692
在`Stream`和`Optional`中正确使用`flatMap`可以减少很多不必要的代码。
685693

686694
### 判断 value 是否为 null
@@ -759,7 +767,7 @@ public Optional<T> filter(Predicate<? super T> predicate) {
759767

760768
### 小结
761769

762-
看完 `Optional` 源码,`Optional` 的方法真的非常简单,值得注意的是如果坚决不想看见 `NPE`,就不要用 `of() `、 `get()`、`flatMap(..)`。最后再综合用一下 `Optional` 的高频方法。
770+
看完 `Optional` 源码,`Optional` 的方法真的非常简单,值得注意的是如果坚决不想看见 `NPE`,就不要用 `of()`、 `get()`、`flatMap(..)`。最后再综合用一下 `Optional` 的高频方法。
763771

764772
```java
765773
Optional.ofNullable(zoo).map(o -> o.getDog()).map(d -> d.getAge()).filter(v->v==1).orElse(3);
@@ -1002,7 +1010,7 @@ System.out.println(date);
10021010
//Wed Jan 27 14:05:29 CST 2021
10031011
```
10041012

1005-
在新特性中引入了 `java.time.ZonedDateTime ` 来表示带时区的时间。它可以看成是 `LocalDateTime + ZoneId`。
1013+
在新特性中引入了 `java.time.ZonedDateTime` 来表示带时区的时间。它可以看成是 `LocalDateTime + ZoneId`。
10061014

10071015
```java
10081016
//当前时区时间

0 commit comments

Comments
 (0)