第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Java 8 功能在列表中搜索非空列表

使用 Java 8 功能在列表中搜索非空列表

qq_花開花謝_0 2022-05-12 15:13:14
我有一個代碼片段,我想使用 Java 8 功能(如 lambdas/streams 等)使其更簡潔易讀?;旧希幸粋€項目列表,每個項目都有一個錯誤列表。如果至少有一項至少有一項錯誤,則需要返回“失敗”。如果沒有項目有任何錯誤,則返回“成功”。Optional<List<Item>> optionalItemList = Optional.ofNullable(message.getItems());if (optionalItemList.isPresent())    for (Item item : optionalItemList.get()) {        Optional<List<Error>> optionalErrorList = Optional.ofNullable((item.getErrors()));        if(optionalErrorList.isPresent())            if (!optionalErrorList.get().isEmpty()) {                return "failure";            }        }        return "success";
查看完整描述

3 回答

?
www說

TA貢獻1775條經(jīng)驗 獲得超8個贊

Optional不是要替換if語句,而是用作方法的返回值。所以我認為你最好不要用它來完成這個任務(wù)。您可以同時使用三元運算符Stream.allMatch:


return message.getItems() == null || 

       message.getItems().stream()

              .allMatch(i -> i.getErrors() == null || i.getErrors().isEmpty()) ?

      "success" :

      "failure";

附帶說明一下,方法永遠不應(yīng)該返回null集合。元素的缺失應(yīng)該通過返回空集合來表示。這將使您的代碼更容易:


return message.getItems().stream().allMatch(i -> i.getErrors().isEmpty()) ?

      "success" :

      "failure";


查看完整回答
反對 回復(fù) 2022-05-12
?
幕布斯7119047

TA貢獻1794條經(jīng)驗 獲得超8個贊

您可以使用flatMap在列表中搜索列表。我個人認為 a不List應(yīng)該是,而是應(yīng)該是一個空列表。如果這是保證,那么代碼可能是這樣的:null


boolean hasError = message.getItems().stream()

    .flatMap(t -> t.getErrors().stream())

    .findAny()

    .isPresent();

return (hasError ? "success" : "failure");

否則,代碼會變長一點:


boolean hasError = Optional.ofNullable(message.getItems()).orElse(List.of()).stream()

    .flatMap(t -> Optional.ofNullable(t.getErrors()).orElse(List.of()).stream())

    .findAny()

    .isPresent();

return (hasError ? "success" : "failure");

請注意,我也可以使用.count() > 0而不是.findAny().isPresent(). 但前者的缺點是它會遍歷所有錯誤,而后者如果發(fā)現(xiàn)任何錯誤就會短路。


查看完整回答
反對 回復(fù) 2022-05-12
?
30秒到達戰(zhàn)場

TA貢獻1828條經(jīng)驗 獲得超6個贊

對我來說,你把它弄得太復(fù)雜了。這是一種更簡單的方法。getItems()如果沒有要返回的項目,請確保您的 方法返回一個空列表,這樣您就可以省去上述額外的空檢查。這種方法不太容易出錯,并導(dǎo)致更易讀的代碼。如果你可以對getErrors上面的方法做同樣的事情,你就可以省去filter(Objects::nonNull)and ,這將進一步簡化流處理管道。


String errorPresent = message.getItems().stream()

    .map(Item::getErrors).filter(Objects::nonNull)

    .map(List::size).filter(s -> s > 0)

    .findAny().map(ignored -> "failure")

    .orElse("success");

或者,您可以使用三元運算符來完成此操作。


String errorPresent = message.getItems().stream()

    .map(Item::getErrors)

    .filter(Objects::nonNull)

    .anyMatch(e -> !e.isEmpty()) ? "failure" : "success";


查看完整回答
反對 回復(fù) 2022-05-12
  • 3 回答
  • 0 關(guān)注
  • 187 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號