Skip to content

Commit 3c85d25

Browse files
committed
🍱 add default methods example
1 parent 09709eb commit 3c85d25

6 files changed

Lines changed: 156 additions & 3 deletions

File tree

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff 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 | |

java8-optional/README.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
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 接口生成的异常 |
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
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+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
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+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
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+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
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+
}

0 commit comments

Comments
 (0)