Java8 新特性 Optional
生活随笔
收集整理的這篇文章主要介紹了
Java8 新特性 Optional
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 package test;
2
3 import java.util.Optional;
4
5 import org.junit.Test;
6 /**
7 * Optional 類是一個可以為null的容器對象。
8 * 如果值存在則isPresent()方法會返回true,調用get()方法會返回該對象。
9 * 用于解決空指針異常
10 * @author xiaou
11 *
12 */
13 public class TestA {
14 public static void main(String[] args) {
15 String name = null;
16 String tip ="對象為null";
17
18 /*
19 * 判斷對象是否未空,如果為空則返回tip值
20 * orElse 和 orElseGet 區別
21 * orElse 是不管對象是不是null都會創建對象
22 * orElseGet 如果對象為null時才會創建對象
23 */
24 String opt = Optional.ofNullable(name).orElse(tip);
25 // 參數是一個函數式接口
26 String opt2 = Optional.ofNullable(name).orElseGet(()->tip);
27 System.out.println(opt);
28 System.out.println(opt2);
29 }
30 @Test
31 public void test2test() {
32 String name = null;
33 String tip ="...";
34 Optional<String> nullable = Optional.ofNullable(name);
35 // 如果不寫這條語句也有可能會造成空指針異常
36 if(nullable.isPresent()) {
37 System.out.println(nullable.get().length());
38 }
39
40 //String opt = Optional.ofNullable(name).orElse(tip);
41
42 }
43 /**
44 * 返回異常
45 *
46 */
47 @Test(expected = IllegalArgumentException.class)
48 public void test3test() {
49 String name = null;
50 String tip ="...";
51 String nullable = Optional.ofNullable(name).orElseThrow(()->new IllegalArgumentException());
52 System.out.println(nullable);
53 }
54 /**
55 * 過濾值
56 */
57 @Test
58 public void test4test() {
59 String name = "26303qq.com";
60 Optional<String> opt = Optional.ofNullable(name).filter((u)->u.contains("@"));
61 if (opt.isPresent())
62 System.out.println(opt.get().toString());
63 }
64
65 /**
66 * map
67 */
68 @Test
69 public void test5test() {
70 User user = new User("xiaou", "2@qq.com");
71 Optional<String>email = Optional.ofNullable(user).map(u->u.getEmail());
72 System.out.println(email.get());
73 }
74 /*
75 * flatMap與map(Function)非常類似,區別在于傳入方法的lambda表達式的返回類型。
76 * map方法中的lambda表達式返回值可以是任意類型,在map函數返回之前會包裝為Optional。
77 * 但flatMap方法中的lambda表達式返回值必須是Optionl實例。
78 */
79 /**
80 * flatmap
81 */
82 @Test
83 public void test6test() {
84 User user = new User("xiaou", "2@qq.com");
85 // 第一種
86 Optional<String>email = Optional.ofNullable(user).flatMap(u->Optional.of(u.getEmail()));
87 // 第二種 在user對象中添加一個方法 返回Option對象
88 Optional<String>email2 = Optional.ofNullable(user).flatMap(User::getOptionalByEmail);
89 System.out.println(email.orElse("ss"));
90 System.out.println(email2.get());
91 }
92
93
94 } 1 package test;
2
3 import java.util.Optional;
4
5 public class User {
6 private String name;
7 private String email;
8
9 public User() {
10 super();
11 }
12 public User(String name, String email) {
13 super();
14 this.name = name;
15 this.email = email;
16 }
17 public String getName() {
18 return name;
19 }
20 public void setName(String name) {
21 this.name = name;
22 }
23 public String getEmail() {
24 return email;
25 }
26 public void setEmail(String email) {
27 this.email = email;
28 }
29
30 public Optional<String> getOptionalByEmail(){
31 return Optional.ofNullable(email);
32 }
33 } View Code
?
轉載于:https://www.cnblogs.com/FlyBlueSky/p/9704140.html
總結
以上是生活随笔為你收集整理的Java8 新特性 Optional的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Axure 安装使用说明
- 下一篇: ice证书制作