在Java8中,将LinkedHashSet逐行附加到TextArea

在Java8中,将LinkedHashSet逐行附加到TextArea,java,textarea,Java,Textarea,我试图在Java8中将LinkedHashSet附加到textArea。下面的代码可以工作,但它不会逐行添加内容,而是将它们全部添加到一行中 Code: textArea.setText(textArea.getText() + linkedHashSet); [ lin1, line2, line3, line4] 我希望将它们附加到下面列出的文本区域 line1 line2 line3 line4 由于这是Java 8,您可以使用: t

我试图在Java8中将LinkedHashSet附加到textArea。下面的代码可以工作,但它不会逐行添加内容,而是将它们全部添加到一行中

Code:
    textArea.setText(textArea.getText() + linkedHashSet);
    [   lin1,       line2,      line3,      line4]
我希望将它们附加到下面列出的文本区域

line1
line2
line3
line4

由于这是Java 8,您可以使用:

textArea.setText( textArea.getText()
                  + String.join( System.lineSeparator(), linkedHashSet ));
各种形式的
String.join
,这一种让您可以使用分隔符(在本例中是行分隔符)将元素的字符串表示连接在一起

通常,如果您的
Iterable
(set,list)包含元素“A”、“B”和“C”,并且您希望将它们与
连接起来,您可以使用:

String.join( ",", myIterable );
这将给你:

A、B、C
如果第一个参数是
---大分隔符---
,那么您将得到:

A--大分隔符--B--大分隔符--C
但是在我们的例子中,我们加入了
System.lineSeparator()
,这意味着字符串将由
\n
(在Linux机器上)或
\r\n
(在Windows机器上)分隔。这意味着每个值将位于单独的行上:

A
B
C

您首先必须了解代码的实际功能。在此解释中,我假设lnkedHashSet是字符串对象的LinkedHashSet

  • 调用textArea.getText()以获取当前的textArea值
  • 调用linkedHashSet.toString()以生成linkedHashSet的文本版本。该方法返回一个字符串,该字符串包含方括号、linkedHashSet中以逗号分隔的字符串列表和最后一个方括号
  • 文本区域值和散列集字符串连接为单个字符串
  • setText(字符串)将文本区域设置为新的单个字符串
  • 所以问题是linkedHashSet.toString()不知道您希望在每个值之后添加一个EOL,并且没有办法让它这样做

    您可以执行以下操作(适用于任何大于等于5的Java版本):


    非常感谢你的工作。但是你能给我几行解释一下String.Join中的代码吗。当然字符串。Join是显而易见的,但它如何与系统一起工作呢。lineSeparator@Moe我对答案作了解释。
    StringBuilder sb = new StringBuilder;
    for (String item : linkedHashSet) {
      sb.append(item).append('\n');
    }
    textArea.setText(sb.toString());