在 Java 8 中逐行将 LinkedHashSet 附加到 TextArea

Append a LinkedHashSet to a TextArea line by line in Java 8

我正在尝试将 LinkedHashSet 附加到 java 中的文本区域 8。下面的代码有效,但它不会逐行添加内容,而是将它们全部添加到一行中。

Code:
    textArea.setText(textArea.getText() + linkedHashSet);
    [   lin1,       line2,      line3,      line4]

我希望将它们附加到下面列出的 textArea

line1
line2
line3
line4

因为这是Java8,你可以使用:

textArea.setText( textArea.getText()
                  + String.join( System.lineSeparator(), linkedHashSet ));

String.join 的各种形式,这个 accepting a delimiter and an Iterable,让您可以使用分隔符将元素的字符串表示形式连接在一起 - 在本例中是行分隔符。

通常,如果您的 Iterable(集合、列表)包含元素 "A"、"B" 和 "C",并且您想将它们与 [=18= 连接起来],你使用:

String.join( ",", myIterable );

这会给你:

A,B,C

如果第一个参数是---BIG DELIMITER---,那么你会得到:

A---BIG DELIMITER---B---BIG DELIMITER---C

但在我们的例子中,我们放入 System.lineSeparator(),这意味着您的字符串将由 \n(在 Linux 机器上)或 \r\n 分隔(在 Windows 机器上)。这意味着每个值都在单独的一行上:

A
B
C

您首先必须了解您的代码实际上做了什么。我在此解释中假设 lnkedHashSet 是 String 对象的 LinkedHashSet。

  1. textArea.getText() 被调用以获取当前文本区域值
  2. 调用
  3. linkedHashSet.toString() 以生成 linkedHashSet 的文本版本。该方法 returns 一个包含方括号的字符串、linkedHashSet 中以逗号分隔的字符串列表和最后一个方括号。
  4. 文本区域值和哈希集字符串连接成一个字符串
  5. textArea.setText(String) 将文本区域设置为新的单个字符串

所以问题是 linkedHashSet.toString() 不知道您想要在每个值之后添加 EOL,并且没有办法让它这样做。

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

StringBuilder sb = new StringBuilder;
for (String item : linkedHashSet) {
  sb.append(item).append('\n');
}
textArea.setText(sb.toString());