【问题标题】:Join elements in a Stream using new line separator使用换行符加入 Stream 中的元素
【发布时间】:2020-05-27 17:05:26
【问题描述】:

我有一个 Set 中的下一个元素列表,我正在尝试使用新的行分隔符打印这些消息,但似乎不可能以这种方式进行。我也尝试过使用“/n”,但我只在屏幕上打印了字符,类似于:

"字段 xxxx 不是有效的 xxxx 值\r\n字段 xxxx 不是有效的 xxx 值"

Set<String> messages;

 public String printValidationMessages() {
    if (this.messages != null && !this.messages.isEmpty()) {
      return this.messages.stream()
          .filter(StringUtils::isNotBlank)
          .collect(Collectors.joining(System.getProperty("line.separator")));
    }
    return BLANK_SPACE;
 }

有没有一种方法可以使用流实现每个元素之间的线分隔?

谢谢!

【问题讨论】:

  • 无法在我的机器上复制。
  • 你是如何打印字符串的?
  • 您使用的是哪个控制台? Collectors.joining("\n") 总是为我工作。或者试试joining("\r\n")
  • 在休息答案中它必须有效吗?对我来说不工作。只打印 \n 字符。
  • 因此,您正在使用一个框架发送字符串,该框架有意在输出中转义换行符。这就是它应该的工作方式。在字符串中间有实际的换行符会使输出无效。

标签: java join java-stream apache-commons


【解决方案1】:

以下代码在我的控制台上运行良好。你能检查一下你的印刷品在哪里吗?

static Set<String> messages = new HashSet<>();
    public static void main(String[] args) {
        messages.add("The field xxxxxis not a valid xxxxx Value");
        messages.add("The field xxxxxis");

        System.out.print(printValidationMessages());

    }
    static Predicate<String> p = s->!s.isEmpty();
    public static String printValidationMessages() {
        if (messages != null && !messages.isEmpty()) {
            return messages.stream().filter(p)
                    .collect(Collectors.joining(System.getProperty("line.separator")));
        }
        return "";
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    相关资源
    最近更新 更多