File tree Expand file tree Collapse file tree
src/main/java/io/github/biezhi/java8/optional Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -22,9 +22,9 @@ java 8 改变了我们思考和编码的方式,在这里你可以学习到 Jav
2222| :-----:| :--------| :-------| :-------|
2323| 第 1 课 | [ 课程介绍] ( https://github.com/biezhi/learn-java8 ) | [ 哔哩哔哩] ( https://www.bilibili.com/video/av19287893/index_1.html#page=1 ) ¦ ; [ Youtube] ( https://youtu.be/A733pQxiEDk ) | 无 |
2424| 第 2 课 | [ Java 8 的发展] ( https://github.com/biezhi/learn-java8/blob/master/java8-growing/README.md ) | [ 哔哩哔哩] ( https://www.bilibili.com/video/av19287893/index_2.html#page=2 ) ¦ ; [ Youtube] ( https://youtu.be/fHhgm1AZzhs ) | [ java8-growing] ( https://github.com/biezhi/learn-java8/tree/master/java8-growing/src/main/java/io/github/biezhi/java8/growing ) |
25- | 第 3 课 | [ 理解 lambda] ( https://github.com/biezhi/learn-java8/blob/master/java8-lambda/README.md ) | [ 哔哩哔哩] ( https://www.bilibili.com/video/av19287893/index_3.html#page=3 ) ¦ ; [ Youtube] ( https://youtu.be/1T2Z9eDowjY ) | [ lambda1] ( https://github.com/biezhi/learn-java8/tree/master/java8-lambda/src/main/java/io/github/biezhi/java8/lambda/lesson1 ) |
26- | 第 4 课 | [ 初尝 lambda] ( https://github.com/biezhi/learn-java8/blob/master/java8-lambda/README.md ) | [ 哔哩哔哩] ( https://www.bilibili.com/video/av19287893/index_4.html#page=4 ) ¦ ; [ Youtube] ( https://youtu.be/nzATBaLNzm8 ) | [ lambda2] ( https://github.com/biezhi/learn-java8/tree/master/java8-lambda/src/main/java/io/github/biezhi/java8/lambda/lesson2 ) |
27- | 第 5 课 | [ lambda 进阶] ( https://github.com/biezhi/learn-java8/blob/master/java8-lambda/README.md ) | [ 哔哩哔哩] ( https://www.bilibili.com/video/av19287893/index_5.html#page=5 ) ¦ ; [ Youtube] ( https://youtu.be/bfc5irPf9ew ) | [ lambda3] ( https://github.com/biezhi/learn-java8/tree/master/java8-lambda/src/main/java/io/github/biezhi/java8/lambda/lesson3 ) |
25+ | 第 3 课 | [ 理解 lambda] ( https://github.com/biezhi/learn-java8/blob/master/java8-lambda/README.md ) | [ 哔哩哔哩] ( https://www.bilibili.com/video/av19287893/index_3.html#page=3 ) ¦ ; [ Youtube] ( https://youtu.be/VkdMeFEGDH8 ) | [ lambda1] ( https://github.com/biezhi/learn-java8/tree/master/java8-lambda/src/main/java/io/github/biezhi/java8/lambda/lesson1 ) |
26+ | 第 4 课 | [ 初尝 lambda] ( https://github.com/biezhi/learn-java8/blob/master/java8-lambda/README.md ) | [ 哔哩哔哩] ( https://www.bilibili.com/video/av19287893/index_4.html#page=4 ) ¦ ; [ Youtube] ( https://youtu.be/X7Zv5vygjTc ) | [ lambda2] ( https://github.com/biezhi/learn-java8/tree/master/java8-lambda/src/main/java/io/github/biezhi/java8/lambda/lesson2 ) |
27+ | 第 5 课 | [ lambda 进阶] ( https://github.com/biezhi/learn-java8/blob/master/java8-lambda/README.md ) | [ 哔哩哔哩] ( https://www.bilibili.com/video/av19287893/index_5.html#page=5 ) ¦ ; [ Youtube] ( https://youtu.be/3G83it4IASc ) | [ lambda3] ( https://github.com/biezhi/learn-java8/tree/master/java8-lambda/src/main/java/io/github/biezhi/java8/lambda/lesson3 ) |
2828| 第 6 课 | 默认方法的妙用 | 哔哩哔哩 ¦ ; Youtube | |
2929| 第 7 课 | 干掉空指针之 Optional | 哔哩哔哩 ¦ ; Youtube | |
3030| 第 8 课 | 理解 Stream | 哔哩哔哩 ¦ ; Youtube | |
Original file line number Diff line number Diff line change 1+ # Optional
2+
3+ ## Optional类的方法
4+
5+ | 方法 | 描述 |
6+ | :-----:| :-------|
7+ | ` empty ` | 返回一个空的 Optional 实例 |
8+ | ` filter ` | 如果值存在并且满足提供的谓词, 就返回包含该值的 Optional 对象;否则返回一个空的 Optional 对象 |
9+ | ` map ` | 如果值存在,就对该值执行提供的 mapping 函数调用 |
10+ | ` flatMap ` | 如果值存在,就对该值执行提供的 mapping 函数调用,返回一个 Optional 类型的值,否则就返 回一个空的 Optional 对象 |
11+ | ` get ` | 如果该值存在,将该值用 Optional 封装返回,否则抛出一个 NoSuchElementException 异常 |
12+ | ` ifPresent ` | 如果值存在,就执行使用该值的方法调用,否则什么也不做 |
13+ | ` isPresent ` | 如果值存在就返回 true,否则返回 false |
14+ | ` of ` | 将指定值用 Optional 封装之后返回,如果该值为 null,则抛出一个 NullPointerException 异常 |
15+ | ` ofNullable ` | 将指定值用 Optional 封装之后返回,如果该值为 null,则返回一个空的 Optional 对象 |
16+ | ` orElse ` | 如果有值则将其返回,否则返回一个默认值 |
17+ | ` orElseGet ` | 如果有值则将其返回,否则返回一个由指定的 Supplier 接口生成的值 |
18+ | ` orElseThrow ` | 如果有值则将其返回,否则抛出一个由指定的 Supplier 接口生成的异常 |
Original file line number Diff line number Diff line change 1+ package io .github .biezhi .java8 .optional ;
2+
3+ import lombok .AllArgsConstructor ;
4+ import lombok .Builder ;
5+ import lombok .Data ;
6+ import lombok .NoArgsConstructor ;
7+
8+ /**
9+ * 住址对象
10+ *
11+ * @author biezhi
12+ * @date 2018/2/11
13+ */
14+ @ Data
15+ @ NoArgsConstructor
16+ @ AllArgsConstructor
17+ public class Address {
18+
19+ /**
20+ * 街道
21+ */
22+ private String street ;
23+
24+ /**
25+ * 门牌
26+ */
27+ private String door ;
28+
29+ }
Original file line number Diff line number Diff line change 1+ package io .github .biezhi .java8 .optional ;
2+
3+ /**
4+ * @author biezhi
5+ * @date 2018/2/11
6+ */
7+ public class BeforeJava8 {
8+
9+ /**
10+ * Java 8 之前
11+ *
12+ * @param user
13+ */
14+ public void saveUser (User user ) {
15+ if (null != user ) {
16+ if (null != user .getAddress ()) {
17+ // 保存 user
18+ }
19+ }
20+ }
21+
22+ /**
23+ * 过多的退出语句
24+ *
25+ * @param user
26+ */
27+ public void saveUser2 (User user ) {
28+ if (null == user ) {
29+ return ;
30+ }
31+ if (null == user .getAddress ()) {
32+ return ;
33+ }
34+ // 保存 user
35+ }
36+
37+ }
Original file line number Diff line number Diff line change 1+ package io .github .biezhi .java8 .optional ;
2+
3+ import java .util .Optional ;
4+
5+ /**
6+ * @author biezhi
7+ * @date 2018/2/11
8+ */
9+ public class OptionalDemo {
10+
11+ /**
12+ * 1. 创建 Optional
13+ */
14+ public void createOptional () {
15+ // 声明一个空的Optional
16+ Optional <Address > optionalAddress = Optional .empty ();
17+
18+ // 依据一个非空值创建Optional
19+ Optional <Address > optionalAddress2 = Optional .of (new Address ());
20+
21+ // 可接受null的Optional
22+ Optional <Address > optionalAddress3 = Optional .ofNullable (new Address ());
23+ }
24+
25+ /**
26+ * 2. 使用 map 从 Optional 对象中提取和转换值
27+ */
28+ public void map () {
29+ Optional <Address > addressOptional = Optional .ofNullable (new Address ("达尔文路" , "88号" ));
30+ Optional <String > street = addressOptional .map (Address ::getStreet );
31+ }
32+
33+ /**
34+ * 3. 使用 flatMap 链接 Optional 对象
35+ */
36+ public void flatMap () {
37+ User user = new User ();
38+ Optional <User > userOptional = Optional .of (user );
39+ // userOptional.map(User::getOptAddress).map(Address::getStreet);
40+ userOptional .flatMap (User ::getOptAddress ).map (Address ::getStreet );
41+ }
42+
43+ /**
44+ * 4. 默认行为及解引用 Optional 对象
45+ */
46+
47+ }
Original file line number Diff line number Diff line change 1+ package io .github .biezhi .java8 .optional ;
2+
3+ import lombok .Data ;
4+
5+ import java .util .Optional ;
6+
7+ /**
8+ * User
9+ *
10+ * @author biezhi
11+ * @date 2018/2/11
12+ */
13+ @ Data
14+ public class User {
15+
16+ private String username ;
17+ private String password ;
18+ private Address address ;
19+
20+ private Optional <Address > optAddress ;
21+
22+ }
You can’t perform that action at this time.
0 commit comments