您好,登錄后才能下訂單哦!
這篇文章主要講解了“Optional處理null的方法有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Optional處理null的方法有哪些”吧!
??相比做Java開發的,見到NullPointerException
肯定不陌生吧,可以說見到它深惡痛絕。在開發時認為不會出現NullPointerException
異常,最終到了生產環境,就給你來點意外驚喜。但是在開發時處理對象為空的通常都是用if(null != xxx)
,或者使用一些工具類,比如:if(ObjectUtils.isEmpty(xxx))
,可以看出這種處理會讓我們的代碼變得很臃腫,遇到一個對象時可能都要這樣來一下。 ??使用Optional
類就可以避免在程序中使用一堆的if
來處理空了。下表列出Optional
類中的方法: |方法名|描述| |:--|:-- |empty|返回一個空的Optional
實例 |of|將指定值用Optional
封裝后返回,如果值為null
,則拋出NullPointerException
異常 |ofNullable|將指定值用Optional
封裝后返回,如果值為null
,則返回空的Optional
對象 |get|如果值存在,則返回該值,否則拋出NullPointerException
異常 |isPresent|檢查值是否存在,存在返回true
,否則返回false
|ifPresent|如果值存在,就執行使用該值的方法調用,否則什么都不做 |filter|如果值存在并且滿足提供的謂詞,就返回包含該值的Optional
對象,否則返回空的Optional
對象 |map|如果值存在,就對該值執行提供的mapping
函數調用 |flatMap|如果值存在,就對該值執行提供的mapping
函數調用,返回一個Optional
類型的值,否則就返回一個空的Optional
對象 |orElse|如果值存在就將其返回,否則返回指定的的值 |orElseGet|如果值存在就將其返回,否則返回由指定的Supplier
接口生成的值 |orElseThrow|如果值存在就將其返回,否則拋出由指定的Supplier
接口生成的異常 下面就一一來詳細使用上面列出的方法。
Optional<User> user = Optional.empty();
創建一個空的Optional
對象
User user = null; Optional<User> optional = Optional.of(user);
user
為空,直接報NullPointerException
異常,因此該方法一般很少用。
User user = null; Optional<User> optional = Optional.ofNullable(user);
user
為空,則返回空的Optional
對象
User user = null; Optional<User> optional = Optional.ofNullable(user); optional.get();
從Optional
中獲取值,如果值不存在則拋出如下異常:java.util.NoSuchElementException: No value present
User user = null; Optional<User> optional = Optional.ofNullable(user); optional.isPresent();
以上例子返回false
,如果user
不為空,則返回true
User user = null; Optional<User> optional = Optional.ofNullable(user); optional.ifPresent(us->{ //user不為空,執行 });
User user = new User(); user.setName("小A"); boolean result = Optional.ofNullable(user).filter(us -> "小A".equals(us.getName())).isPresent();
如果用戶名為小A
,則返回true
,否則返回false
User user = new User(); user.setName("小A"); String name = Optional.ofNullable(user).map(User::getName).get();
如果user
不為空,則抽取name
屬性,使用get()
獲取。這里如果name
為空,則會報異常,因此通常都是指定默認值或使用自定義異常拋出。
String name = Optional.ofNullable(user).map(User::getName).orElse("");
或
String name = Optional.ofNullable(user) .map(User::getName) .orElseThrow(()->new RuntimeException("用戶名不能為空"));
該方法一般用于從類中獲取其他類的中某個屬性,比如一個班級里面有學生,學生里面有地址,現在需要獲取這個班級下的某個學生的地址,按之前的寫法:
Address address = new Address(); address.setAddr("天河區"); Student student = new Student(); student.setName("小A"); student.setAddress(address); Grade grade = new Grade(); grade.setName("三年級2班"); grade.setStudent(student); if(!ObjectUtils.isEmpty(grade)){ Student student1 = grade.getStudent(); if(!ObjectUtils.isEmpty(student1)){ Address address1 = student1.getAddress(); if(!ObjectUtils.isEmpty(address1)){ System.out.println(address1.getAddr()); } } }
為了程序不出問題,就會寫一大堆的if
來判斷,下面用flatMap
來看下怎么實現:
Optional.ofNullable(grade) .flatMap(g->Optional.ofNullable(g.getStudent())) .flatMap(s->Optional.ofNullable(s.getAddress())) .map(Address::getAddr) .orElse("")
或
Optional.ofNullable(grade) .map(Grade::getStudent) .map(Student::getAddress) .map(Address::getAddr) .orElse("")
Optional.ofNullable(grade).orElse(new Grade());
Optional.ofNullable(grade).orElseGet(()->new Grade());
Optional.ofNullable(grade).orElseThrow(()->new RuntimeException("班級不能為空"));
以上Optional
類的全部方法的使用都列出來了。
感謝各位的閱讀,以上就是“Optional處理null的方法有哪些”的內容了,經過本文的學習后,相信大家對Optional處理null的方法有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。