Listview 文本区域从ArrayList添加文本,在JavaFX中不带逗号(,)

Listview 文本区域从ArrayList添加文本,在JavaFX中不带逗号(,),listview,arraylist,printing,javafx,textarea,Listview,Arraylist,Printing,Javafx,Textarea,我有一个ArraylistAList,它有超过100000项。我需要显示UI中的每个数据项。但是TeaxtArea.addtext(AList)以这种方式显示数据 [A、B、C、D………] 同样地。我需要做的是把它打印在一页纸上。因此,我必须将节点传递给PrinterJob 无论如何,我可以删除逗号并用换行符一次替换它。我无法使用appendText,因此追加100000项会使UI无响应 PS:我已经从线程收集了数据,并将其保存在ArrayList上。我在ListView上更新它时没有问题,但在

我有一个Arraylist
AList
,它有超过100000项。我需要显示UI中的每个数据项。但是
TeaxtArea.addtext(AList)以这种方式显示数据

[A、B、C、D………]

同样地。我需要做的是把它打印在一页纸上。因此,我必须将节点传递给
PrinterJob

无论如何,我可以删除逗号并用换行符一次替换它。我无法使用
appendText
,因此追加100000项会使UI无响应


PS:我已经从线程收集了数据,并将其保存在ArrayList上。我在ListView上更新它时没有问题,但在TextArea上更新时有一个问题。我不想在不使用Append的情况下更改打印格式。您可以使用以下命令预处理列表并创建新字符串:

List<String> list = new ArrayList<>();

for( int i=0; i < 100000; i++) {
    list.add("This is line nr " + i);
}

StringBuilder sb = new StringBuilder();
for( String text: list) {

    if( sb.length() > 0) {
        sb.append("\n");
    }

    sb.append(text);
}

textArea.appendText(sb.toString());
List List=new ArrayList();
对于(int i=0;i<100000;i++){
列表。添加(“这是第nr行”+i);
}
StringBuilder sb=新的StringBuilder();
用于(字符串文本:列表){
如果(sb.length()>0){
某人附加(“\n”);
}
附加(正文);
}
textArea.appendText(sb.toString());
设置初始容量也可能有助于处理如此大的集合


如果你使用java 8,你也可能想看看.

让我们把ALISE看作字符串的数组,

ArrayList<String> aList = new ArrayList<String>();
        aList.add("A");
        aList.add("B");
        aList.add("C");

试试这个…

是的,这种方法很有效,但由于数据量大,我的UI没有响应。这不会发生在
列表视图中
文本区域与列表视图不同。ListView优化为只渲染您看到的部分,而TextArea一次渲染所有部分。有什么建议可以改进吗?一次渲染所有内容时,我的UI会卡住。我以前尝试过节流,但需要花费大量时间。如果字符串已经在列表中,则使用
list.stream().collect(Collectors.joining(“\n”)
比使用
StringJoiner
简单。可能重复
StringBuffer listText = new StringBuffer();
for(String s : aList){
    listText.append(s+"\n");
}
System.out.println(listText);