[英]Java 8 nested null check and access first element
如何將以下舊版 java 代碼轉換為使用可選:
if (outer != null
&& outer.getInnerMethod() != null
&& outer.getInnerMethod().isAllowed()) {
Obj value = outer.getInnerMethod().getSomethingElse();
}
使用像 Optional.ofNullable 這樣的東西把我帶到了這里 -
Optional.ofNullable(Outer.getOuter)
.map(Outer::getInnerMethod)
.map(SomethingElse::isAllowed)
.ifPresent(.. );
但是 ifPresent 將無法訪問外部 object。 改變這樣的東西最干凈的方法是什么?
做這個
Optional.ofNullable(Outer.getOuter)
.filter(outer -> ::Objects.nonNull(outer.getInnerMethod()))
.filter(SomethingElse::isAllowed)
.map (.. ); //or whatever operation you want to do here
使用filter
代替map
。 來自java 文檔
如果存在一個值,並且該值與給定的謂詞匹配,則返回一個描述該值的 Optional,否則返回一個空的 Optional。
Optional<Obj> optional = Optional.ofNullable(Outer.getOuter)
.map(Outer::getInnerMethod)
.filter(SomethingElse::isAllowed)
.map(SomethingElse::getSomethingElse);
而不是使用 map 來檢查是否允許使用filter(e -> e.isAllowed())
這將過濾掉任何不允許的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.