forked from hellokaton/learn-java8
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathOptionalDemo.java
More file actions
100 lines (84 loc) · 3.11 KB
/
Copy pathOptionalDemo.java
File metadata and controls
100 lines (84 loc) · 3.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package io.github.biezhi.java8.optional;
import java.util.Optional;
import java.util.Properties;
/**
* @author biezhi
* @date 2018/2/11
*/
public class OptionalDemo {
/**
* 1. 创建 Optional
*/
public void createOptional() {
// 声明一个空的Optional
Optional<Address> optionalAddress = Optional.empty();
// 依据一个非空值创建Optional
Optional<Address> optionalAddress2 = Optional.of(new Address());
// 可接受null的Optional
Optional<Address> optionalAddress3 = Optional.ofNullable(new Address());
}
/**
* 2. 使用 map 从 Optional 对象中提取和转换值
*/
public void map() {
Optional<Address> addressOptional = Optional.ofNullable(new Address("达尔文路", "88号"));
Optional<String> street = addressOptional.map(Address::getStreet);
}
/**
* 3. 使用 flatMap 链接 Optional 对象
*/
public void flatMap() {
User user = new User();
Optional<User> userOptional = Optional.of(user);
// userOptional.map(user -> user.getOptAddress())
Optional<String> stringOptional = userOptional.flatMap(User::getOptAddress).map(Address::getStreet);
}
/**
* 4. 默认行为及解引用 Optional 对象
*/
public void defaultValue() {
Optional<Address> addressOptional = Optional.ofNullable(null);
String street = addressOptional.map(Address::getStreet).orElse("北京二环");
System.out.println(street);
}
public static void main(String[] args) {
User user = new User();
user.setUsername("biezhi");
user.setPassword("123456");
user.setOptAddress(Optional.of(new Address("达尔文路", "88号")));
user.setAge(30);
// Address address1 = null;
// try {
// address1 = user.getOptAddress().filter(address -> address.getDoor().contains("878"))
// .orElseThrow(new Supplier<Throwable>() {
// @Override
// public Throwable get() {
// return new Exception("挂了");
// }
// });
// } catch (Throwable throwable) {
// throwable.printStackTrace();
// }
// System.out.println(address1);
System.out.println(getStreet(Optional.of(user), 50));
}
public static String getStreet(Optional<User> user, int minAge) {
return user.filter(u -> u.getAge() >= minAge)
.flatMap(User::getOptAddress)
.map(Address::getStreet)
.orElse("没有");
}
public static Optional<Integer> parseInt(String value) {
try {
return Optional.ofNullable(Integer.parseInt(value));
} catch (Exception e) {
return Optional.empty();
}
}
public int readPoint(Properties props, String name) {
return Optional.ofNullable(props.getProperty(name))
.flatMap(OptionalDemo::parseInt)
.filter(i -> i > 0)
.orElse(0);
}
}