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

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

調節 java 流的過濾器

調節 java 流的過濾器

Cats萌萌 2022-06-23 16:58:29
我正在研究一個過濾器函數,它可以使用許多參數進行過濾,為此我正在使用 Java Streams。這就是我的代碼:public void filter(String cours,String prof,String salle,String group) {this.appointments().addAll(getTimeTable().getCreneauxsList().stream()            .filter(e->e.getProf().equalsIgnoreCase(prof) )            .filter(e->e.getCours().equalsIgnoreCase(cours) )            .filter(e->e.getSalle().equalsIgnoreCase(salle) )            .filter(e->e.getGroup().equalsIgnoreCase(group) )            .collect(Collectors.toList()));}我想查看一個或多個參數 cours、salle、prof、group 是否為 null 或其 trim () = "",用它過濾是不值得的,因為結果不是我期望得到的。但我不知道該怎么做。
查看完整描述

3 回答

?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

您可以創建一個方法來在過濾期間處理 null 或空字符串,如下所示:


public static boolean compareNullableString(String str, String filterStr) {


    return (filterStr == null || filterStr.trim().equals("")) ? true : filterStr.equalsIgnoreCase(str);


}

然后修改你的代碼,如:


this.appointments().addAll(getTimeTable().getCreneauxsList().stream()

                .filter(e->compareNullableString(e.getProf,prof) )

                .filter(e->compareNullableString(e.getCours,cours))

                .filter(e->compareNullableString(e.getSalle,salle) )

                .filter(e->compareNullableString(e.getGroup,group) )

                .collect(Collectors.toList()));


查看完整回答
反對 回復 2022-06-23
?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

您可以Strings.isNullOrEmpty()從番石榴中使用:


boolean isNullOrEmpty = Strings.isNullOrEmpty(e.getProf());

或者有一組來自 apache commons 的方法:


StringUtils.isBlank, StringUtils.isNotBlank, StringUtils.isEmpty, StringUtils.isNotEmpty


這可能有用:StringUtils.isBlank() 與 String.isEmpty()


您的情況isNotBlank正是您正在尋找的:


BiPredicate<String, String> myPredicate = (field, eqString) ->

        StringUtils.isNotBlank(field) && field.equalsIgnoreCase(eqString);


    ...

    .filter(e -> myPredicate.test(e.getProf(), prof))

    .filter(e -> myPredicate.test(e.getCours(), cours))

    .filter(e -> myPredicate.test(e.getSalle(), salle))

    .filter(e -> myPredicate.test(e.getGroup(), group))

    ...


查看完整回答
反對 回復 2022-06-23
?
MYYA

TA貢獻1868條經驗 獲得超4個贊

這個答案可以改進。


方法compareNullableString可以按原樣。您可以擺脫創建 List 并在forEach. 過濾也可以提取到Predicate。


List<String> appointments = this.appointments();


Stream<Predicate<Creneauxs>> filterStream = Stream.of(

        e->compareNullableString(e.getProf,prof),

        e->compareNullableString(e.getCours,cours),

        e->compareNullableString(e.getSalle,salle),

        e->compareNullableString(e.getGroup,group)

);

Predicate<Creneauxs> filter = filterStream.reduce(Predicate::and).orElse(x->false);


getTimeTable().getCreneauxsList().stream()

  .filter(filter)

  .forEach(appointments::add);


查看完整回答
反對 回復 2022-06-23
  • 3 回答
  • 0 關注
  • 203 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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