@@ -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