java第六章工具包P6-03.Optional 2020.4.?
目錄
- P6-21.Optional
- 復現:
- P6-22.Filter&Map
- 復現:猜測是正確的:filter用return 真假,~~(idea甚至會提示你)~~ 而ifpresent 是不可以寫return的,他只是操作
P6-21.Optional
(容易引起空指針異常)
如果沒有usb呢?那getUsb就是一個空引用
在空引用下引用getVersion是不行的
為了妥協:只能這么寫(瘋狂套娃)
那就很煩:那怎么辦呢?:option(java8引入):
為解決空引用:
相當于有集合和流兩種操作
左側:包含SoundCard對象的容器-> 都是容器的對象
右側:空容器->但內部無元素
所以對optional這個容器絕不會異常
ifPresent/ifPresentOrElse有元素會操作,無元素就不執行
創建:
第一個不能是空的:
第二個可以:(第二個常用)
就是把對象塞進容器里
執行:只執行,不返回結果
(對元素進行操作)
復現:
(idea似乎會自動對java8升級)
import java.util.Optional; class Usb{String version;Usb(String version){this.version=version;}public String getVersion() {return version;} } public class Main {public static void main(String[] args) {Usb usb=new Usb("1.1");map(usb);}public static void map(Usb usb){Optional.ofNullable(usb).ifPresent(u->{System.out.println(u.getVersion());});} }寫法就和流很像了:(方法鏈)
上圖的最后一個不行:(也就是下圖)還是可能空指針
java9新的:
俺的idea沒升級TAT
Cannot resolve plugin org.apache.maven.plugins:maven-compiler-plugin:3.1
P6-22.Filter&Map
過濾:(就和Stream一樣了)
復現:猜測是正確的:filter用return 真假,(idea甚至會提示你) 而ifpresent 是不可以寫return的,他只是操作
import java.util.Optional; class Usb{String version;Usb(String version){this.version=version;}public String getVersion() {return version;} } public class Main {public static void main(String[] args) {Usb usb=new Usb("1.1");map(usb);}public static void map(Usb usb){Optional.ofNullable(usb).filter(u->{/俺的猜測System.out.println("filting...");boolean judgeer="3.0".equals(u.getVersion());System.out.println(judgeer);return judgeer;}).ifPresent(u->{System.out.println(u.getVersion());});} }
map:映射:可以把容器里的東西映射成新的東西
主漢函數里是這么跑的:
容器里沒有的話,執行寫的函數:
這里return了 必須return一個容器
獲取默認值的操作:一個是無論有沒有,都創建,但以容器內部原有的優先級高,另一個是有東西這個函數就不執行了
注意等效中的return
其實不建議:get
瘋狂套娃:
映射:
map實現:(不會總返回空容器)
里面的empty:
EMPTY:
建議只作為工具,就別瞎用了:
(但請求上,cookie一類的,還是建議用)
總結
以上是生活随笔為你收集整理的java第六章工具包P6-03.Optional 2020.4.?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阅读SessionFactory源码
- 下一篇: 动态规划-KMP字符匹配算法