调节Java流的过滤器

时间:2019-02-17 09:22:28

标签: java java-8 java-stream

我正在研究可以使用许多参数进行过滤的过滤器功能,而我正在使用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 个答案:

答案 0 :(得分:2)

您可以创建一个方法来在过滤期间处理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()));

答案 1 :(得分:0)

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

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

或者有一些来自Apache Commons的方法:

StringUtils.isBlankStringUtils.isNotBlankStringUtils.isEmptyStringUtils.isNotEmpty

这可能有用:StringUtils.isBlank() vs 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))
    ...

答案 2 :(得分:0)

This的答案可以得到改善。

方法JsonNode data = new ObjectMapper().readTree(dataString); String expiryDate = data.get("expiryDate").get("value").textValue(); ((ObjectNode) data).put("05-02-2020"); 可以保持不变。您可以摆脱创建List和在compareNullableString中添加元素的麻烦。过滤也可以提取到forEach

Predicate