亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

Java 8代碼優化——刪除if語句

Java 8代碼優化——刪除if語句

白板的微信 2023-11-10 16:44:12
我正在學習 Java 8 的一些技巧。我創建了一個簡單的列表: private void createData() {        bottles.add(new Whiskey("Jack Daniels", "PL"));        bottles.add(new Whiskey("Balentains", "PL"));        bottles.add(new Whiskey("Balentains", "EN"));        bottles.add(new Whiskey("Balentains", "EN"));        bottles.add(new Whiskey("Balentains", "GR"));        bottles.add(new Whiskey("Balentains", "PL"));        bottles.add(new Whiskey("Balentains", "GR"));    }現在我想通過一些事情從這個列表中獲取項目。如果用戶給出一個參數origin,我想通過 過濾這個列表origins,但是當他給出錯誤origin時,他應該得到空列表,當他不給出origin參數時,他應該得到整個列表。我有一個過濾列表中項目的方法: private Optional<List<Whiskey>> getWhiskeyFromCountry(String origin) {        final List<Whiskey> whiskies = bottles.stream()                .filter(b -> b.getOrigin().equals(origin))                .collect(Collectors.toList());        return whiskies.isEmpty() ? Optional.empty() : Optional.of(whiskies);    }還有一個獲取參數(或不獲取參數)并響應結果的主要方法:private void getAll(RoutingContext routingContext) {        Optional<String> origin = Optional.ofNullable(routingContext.request().params().get("filter"));        List<Whiskey> result = getWhiskeyFromCountry(origin.orElse("")).orElse(Collections.EMPTY_LIST);        routingContext.response()                .putHeader("content-type", "application/json; charset=utf-8")                .end(Json.encodePrettily(origin.isPresent() ? result : bottles));    }問題是我仍然在最后一行使用 if 語句,但我不想這樣做。我想將此代碼更改為清晰且實用。我嘗試用Options做一些魔法,但最終我得到了這個,我認為它可以做得更好、更簡單。你可以幫幫我嗎?或者也許這段代碼很好,我不需要改變任何東西?這個問題更多的是關于干凈的代碼。
查看完整描述

1 回答

?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

您可以使此方法getWhiskeyFromCountry接受Optional<String>作為參數


private List<Whiskey> getWhiskeyFromCountry(Optional<String> origin)

然后如果Optional為空返回空列表或返回基于的列表filter,如果用戶輸入錯誤origin仍然會得到空列表


return origin.map(o->bottles.stream()

            .filter(b -> b.getOrigin().equals(o))

            .collect(Collectors.toList())).orElse(Collections.EMPTY_LIST);

或者在上面的代碼中,您可以進行一些小的調整以返回List此方法getWhiskeyFromCountry


 private List<Whiskey> getWhiskeyFromCountry(String origin) {


    return bottles.stream()

            .filter(b -> b.getOrigin().equals(origin))

            .collect(Collectors.toList());

  }

并在 main 方法中使用Optional.map


Optional<String> origin = Optional.ofNullable(routingContext.request().params().get("filter"));

List<Whiskey> result = origin.map(o->getWhiskeyFromCountry(o))

                             .orElse(bottles);


查看完整回答
反對 回復 2023-11-10
  • 1 回答
  • 0 關注
  • 188 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號