Skip to content

Commit 4619df9

Browse files
Optional中flatMap和map的运用。
1 parent 787e8fc commit 4619df9

File tree

2 files changed

+43
-15
lines changed

2 files changed

+43
-15
lines changed

src/main/java/com/bean/Address.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,11 @@ public void setCity(String city) {
4747
this.city = city;
4848
}
4949

50-
public Optional<String> getCity() {
51-
return Optional.ofNullable(this.city);
50+
// public Optional<String> getCity() {
51+
// return Optional.ofNullable(this.city);
52+
// }
53+
54+
public String getCity() {
55+
return this.city;
5256
}
5357
}

src/main/java/com/java8/optional/OptionalDemo.java

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public class OptionalDemo {
1818
/**
1919
* orElse(默认值),如果Optional<T>封装的对象不存在值,则返回默认值。
2020
*/
21-
public static void orElseDemo() {
21+
public void orElseDemo() {
2222
// Worker worker1=new Worker("123",18,"lin");
2323
Worker worker1 = null;
2424
Worker worker2 = new Worker("456", 28, "chen");
@@ -37,22 +37,22 @@ public static void orElseDemo() {
3737
* orElseGet(),如果Optional<T>封装的对象不存在值,则执行Supplier函数式。
3838
* orElseGet(Supplier<? extends T> other),返回的类型必须和Optional封装的对象类型一致。
3939
*/
40-
public static void ofElseGetDemo() {
40+
public void ofElseGetDemo() {
4141
String name1 = null;
4242
String name2 = "lin";
4343
//orElseGet(Supplier<? extends T> other),返回的类型必须和Optional封装的对象类型一致。
44-
String result = Optional.ofNullable(name1).orElseGet(OptionalDemo::supplier);
44+
String result = Optional.ofNullable(name1).orElseGet(this::supplier);
4545
System.out.println(result);
4646
}
4747

48-
public static String supplier() {
48+
public String supplier() {
4949
return "orElseGet(Supplier)";
5050
}
5151

5252
/**
5353
* of(对象),如果封装的对象为空,则会报出空指针异常
5454
*/
55-
public static void ofDemo() {
55+
public void ofDemo() {
5656
// Worker worker1=new Worker("123",18,"lin");
5757
Worker worker1 = null;
5858
Worker worker2 = new Worker("456", 28, "chen");
@@ -63,7 +63,7 @@ public static void ofDemo() {
6363
/**
6464
* isPresent()表示如果Optional<T>封装的对象不为空,就返回true。
6565
*/
66-
public static void isPresentDemo() {
66+
public void isPresentDemo() {
6767
Worker worker1 = new Worker("123", 18, "lin");
6868
Optional<Worker> workerOpt = Optional.ofNullable(worker1);
6969
//这种写法比较丑,可以直接用下面的ifPresent()方法代替。
@@ -80,7 +80,7 @@ public static void isPresentDemo() {
8080
/**
8181
* ifPresent()表示如果对象不为null,则会执行对应的lambda语句。
8282
*/
83-
public static void ifPresentDemo() {
83+
public void ifPresentDemo() {
8484
// Address address=new Address("中国","广东","深圳");
8585
// Worker worker1=new Worker("123",18,"lin",address);
8686
Worker worker1 = new Worker("123", 18, "lin");
@@ -97,7 +97,7 @@ public static void ifPresentDemo() {
9797
/**
9898
* 这种大量的判空代码很丑。
9999
*/
100-
public static void tooMuchNull(Worker worker) {
100+
public void tooMuchNull(Worker worker) {
101101
// if (worker != null) {
102102
// Address address=worker.getAddress();
103103
// if (address != null) {
@@ -106,26 +106,50 @@ public static void tooMuchNull(Worker worker) {
106106
// }
107107
}
108108

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+
}
109134

110135
/**
111136
* flatMap(),如果Optional封装对象不为空,就会执行对应的mapping函数,返回Optional类型的值。
112137
* 否则就返回一个空的Optional对象。
113138
*/
114-
public static void flatMapDemo() {
139+
public void flatMapDemo() {
115140
Address address = new Address("中国", "广东", "深圳");
116141
Worker worker = new Worker("123", 18, "lin", address);
117-
//默认值为"default",有没有更好的选择?
118142
String city = Optional.ofNullable(worker)
119143
.flatMap(Worker::getAdress)
120-
.flatMap(Address::getCity)
144+
.map(Address::getCity)
121145
.orElse("default");
122146
System.out.println(city);
123147
}
124148

125149
/**
126150
* orElseThrow(),如果Optional封装的对象为空,就会抛出对应的异常。
127151
*/
128-
public static void orElseThrowDemo() {
152+
public void orElseThrowDemo() {
129153
// Worker worker = new Worker("123", 18, "lin");
130154
Worker worker = null;
131155
Worker result = Optional.ofNullable(worker)
@@ -134,7 +158,7 @@ public static void orElseThrowDemo() {
134158
}
135159

136160

137-
public static void filterDemo() {
161+
public void filterDemo() {
138162
Worker worker = new Worker("123", 18, "lin");
139163
Optional<Worker> result = Optional.ofNullable(worker)
140164
.filter(worker1 -> worker1.getAge() > 20);

0 commit comments

Comments
 (0)