簡體   English   中英

Java 8 嵌套 null 檢查和訪問第一個元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM