3 回答

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()));

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))
...

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);
添加回答
舉報