@@ -18,7 +18,7 @@ public class OptionalDemo {
18
18
/**
19
19
* orElse(默认值),如果Optional<T>封装的对象不存在值,则返回默认值。
20
20
*/
21
- public static void orElseDemo () {
21
+ public void orElseDemo () {
22
22
// Worker worker1=new Worker("123",18,"lin");
23
23
Worker worker1 = null ;
24
24
Worker worker2 = new Worker ("456" , 28 , "chen" );
@@ -37,22 +37,22 @@ public static void orElseDemo() {
37
37
* orElseGet(),如果Optional<T>封装的对象不存在值,则执行Supplier函数式。
38
38
* orElseGet(Supplier<? extends T> other),返回的类型必须和Optional封装的对象类型一致。
39
39
*/
40
- public static void ofElseGetDemo () {
40
+ public void ofElseGetDemo () {
41
41
String name1 = null ;
42
42
String name2 = "lin" ;
43
43
//orElseGet(Supplier<? extends T> other),返回的类型必须和Optional封装的对象类型一致。
44
- String result = Optional .ofNullable (name1 ).orElseGet (OptionalDemo ::supplier );
44
+ String result = Optional .ofNullable (name1 ).orElseGet (this ::supplier );
45
45
System .out .println (result );
46
46
}
47
47
48
- public static String supplier () {
48
+ public String supplier () {
49
49
return "orElseGet(Supplier)" ;
50
50
}
51
51
52
52
/**
53
53
* of(对象),如果封装的对象为空,则会报出空指针异常
54
54
*/
55
- public static void ofDemo () {
55
+ public void ofDemo () {
56
56
// Worker worker1=new Worker("123",18,"lin");
57
57
Worker worker1 = null ;
58
58
Worker worker2 = new Worker ("456" , 28 , "chen" );
@@ -63,7 +63,7 @@ public static void ofDemo() {
63
63
/**
64
64
* isPresent()表示如果Optional<T>封装的对象不为空,就返回true。
65
65
*/
66
- public static void isPresentDemo () {
66
+ public void isPresentDemo () {
67
67
Worker worker1 = new Worker ("123" , 18 , "lin" );
68
68
Optional <Worker > workerOpt = Optional .ofNullable (worker1 );
69
69
//这种写法比较丑,可以直接用下面的ifPresent()方法代替。
@@ -80,7 +80,7 @@ public static void isPresentDemo() {
80
80
/**
81
81
* ifPresent()表示如果对象不为null,则会执行对应的lambda语句。
82
82
*/
83
- public static void ifPresentDemo () {
83
+ public void ifPresentDemo () {
84
84
// Address address=new Address("中国","广东","深圳");
85
85
// Worker worker1=new Worker("123",18,"lin",address);
86
86
Worker worker1 = new Worker ("123" , 18 , "lin" );
@@ -97,7 +97,7 @@ public static void ifPresentDemo() {
97
97
/**
98
98
* 这种大量的判空代码很丑。
99
99
*/
100
- public static void tooMuchNull (Worker worker ) {
100
+ public void tooMuchNull (Worker worker ) {
101
101
// if (worker != null) {
102
102
// Address address=worker.getAddress();
103
103
// if (address != null) {
@@ -106,26 +106,50 @@ public static void tooMuchNull(Worker worker) {
106
106
// }
107
107
}
108
108
109
+ public void mapDemo () {
110
+ Worker worker = new Worker ("123" , 18 , "lin" );
111
+ String name = Optional .ofNullable (worker ).map (Worker ::getName ).orElse ("" );
112
+ System .out .println (name );
113
+
114
+ }
115
+
116
+
117
+ public void mapDemo2 () {
118
+ String str =" test " ;
119
+ Optional .ofNullable (str ).map (String ::trim )
120
+ .filter (t -> t .length ()> 1 )
121
+ .ifPresent (s ->{
122
+ s +="1234" ;
123
+ System .out .println (s );
124
+ });
125
+ //相当于以下代码:
126
+ // if (str != null) {
127
+ // str=str.trim();
128
+ // if (str.length() > 1) {
129
+ // str+="1234";
130
+ // System.out.println(str);
131
+ // }
132
+ // }
133
+ }
109
134
110
135
/**
111
136
* flatMap(),如果Optional封装对象不为空,就会执行对应的mapping函数,返回Optional类型的值。
112
137
* 否则就返回一个空的Optional对象。
113
138
*/
114
- public static void flatMapDemo () {
139
+ public void flatMapDemo () {
115
140
Address address = new Address ("中国" , "广东" , "深圳" );
116
141
Worker worker = new Worker ("123" , 18 , "lin" , address );
117
- //默认值为"default",有没有更好的选择?
118
142
String city = Optional .ofNullable (worker )
119
143
.flatMap (Worker ::getAdress )
120
- .flatMap (Address ::getCity )
144
+ .map (Address ::getCity )
121
145
.orElse ("default" );
122
146
System .out .println (city );
123
147
}
124
148
125
149
/**
126
150
* orElseThrow(),如果Optional封装的对象为空,就会抛出对应的异常。
127
151
*/
128
- public static void orElseThrowDemo () {
152
+ public void orElseThrowDemo () {
129
153
// Worker worker = new Worker("123", 18, "lin");
130
154
Worker worker = null ;
131
155
Worker result = Optional .ofNullable (worker )
@@ -134,7 +158,7 @@ public static void orElseThrowDemo() {
134
158
}
135
159
136
160
137
- public static void filterDemo () {
161
+ public void filterDemo () {
138
162
Worker worker = new Worker ("123" , 18 , "lin" );
139
163
Optional <Worker > result = Optional .ofNullable (worker )
140
164
.filter (worker1 -> worker1 .getAge () > 20 );
0 commit comments