如何将映射中的所有键和值打印到单个字符串?

时间:2018-08-01 20:53:48

标签: java lambda java-stream

我写了以下代码:

    String reqParams = null;

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

    for (Object key : params.keySet()) {
        String keyStr = (String) key;
        String[] value = params.get(keyStr);
        reqParams = reqParams + ((String) key + "=" + Arrays.toString(value) + " ");
    }

   System.out.println(reqParams);

我有以下输出:

  nullorderId=[01] orderStatus=[delivered]
  1. 如何摆脱开头打印的null
  2. 是否可以避免打印[]?
  3. 如何使用流?

4 个答案:

答案 0 :(得分:2)

reqParams初始化为一个空字符串。就是

String reqParams = null;

成为

String reqParams = "";

答案 1 :(得分:2)

使用map操作和joining收集器:

String resultSet = 
          params.entrySet()
                .stream()
                .map(e -> e.getKey() + "=" + String.join(", ", e.getValue()))
                .collect(Collectors.joining(" "));
    如果数组具有多个元素,则
  • ", "是定界符。
  • " "中的
  • joining是分隔元素的定界符 从源头上来。

答案 2 :(得分:1)

  1. 像这样初始化reqParams:String reqParams = ""或不要将字符串附加到redParams上,只需执行reqParams = ((String) key + "=" + value[0] + " ");

  2. 只获取数组中的元素,而不是将数组变成字符串:reqParams = reqParams + ((String) key + "=" + value[0] + " ");

  3. 您可以流params.keySet().stream().forEach(key -> .... )并在forEach中添加一个函数,就像在for循环中一样,该函数会将键和值附加到String。

答案 3 :(得分:1)

您可以使用join类的String方法将数组变成字符串,避免使用[ ]字符。另外,如果您将Map.Entry与类型参数一起使用,并遍历条目集而不是键集,则不需要原始代码中的所有强制转换和多余的括号。

for( Map.Entry<String,String[]> entry : params.entrySet()) {
    reqParams = reqParams + entry.getKey() + "=" + String.join(",", entry.getValue()) + " ";
}

因此,join在这里获取您的数组,并用逗号分隔所有元素。

最后,如果将reqParams初始化为""而不是null,则不会显示单词null

String reqParams = "";