如何使用Java 8筛选出空值或空值?

时间:2018-09-28 14:46:38

标签: java java-stream

我有一个参数映射,我试图通过将请求参数附加到URL来构建完整的URL。

以下是我到目前为止从参数映射中提取键值的代码。

Map<String, String[]> parameters = request.getParameterMap();

String params = parameters.entrySet()
                .stream()
                .map(e -> e.getKey() + "=" + String.join(",", e.getValue()))
                .collect(Collectors.joining("&"));
String url = requestUrl + "?" + params;

如果我仅将值传递给year参数,则我的url当前会显示类似以下内容:

/student/query?Id=&grade=&year=2018

我要打印以下内容:

/student/query?year=2018

如果我不传递某个参数的值,我不希望它被打印。

我该如何解决?

1 个答案:

答案 0 :(得分:2)

您可以使用filter,它仅保留String[]包含非空字符串:

            .filter(e -> {
                String[] value = e.getValue();
                if (value == null || value.length == 0) {
                    return false;
                } else {
                    for (String element : value) {
                        if (element != null && !element.isEmpty()) {
                            return true;
                        }
                    }
                    return false;
                }
            })