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);
添加回答
举报