【问题标题】:How to filter out empty or null values using java 8? [duplicate]如何使用 java 8 过滤掉空值或空值? [复制]
【发布时间】:2019-03-04 14:17:51
【问题描述】:

我有一个参数映射,我正在尝试通过将请求参数附加到 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 参数,我的网址当前会打印出类似于以下内容的内容:

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

我想打印如下内容:

/student/query?year=2018

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

我该如何解决这个问题?

【问题讨论】:

  • 你应该encode每个键和值。

标签: java java-stream


【解决方案1】:

您可以使用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;
                }
            })

【讨论】:

  • 我已经尝试过了,它仍然打印/student/query?Id=&amp;grade=&amp;year=2018
  • @BlueStar 你有什么意见parameters
  • 我可以查询一个学生的 3 个参数。 ID,年级和年份。如果我只是将年份作为参数传递,我希望我的 url 变量的值为 /student/query?year=2018
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-08
  • 2022-01-20
  • 1970-01-01
  • 2017-08-24
  • 1970-01-01
相关资源
最近更新 更多