Java 文本字段和控制台打印之间的差异

Java 文本字段和控制台打印之间的差异,java,swing,textfield,Java,Swing,Textfield,我将数据存储到名为array的数组列表中,然后使用以下功能显示每天的最大数: private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: array .stream() .collect( Collectors.grou

我将数据存储到名为
array
的数组列表中,然后使用以下功能显示每天的最大数:

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
    array
   .stream()
   .collect(

      Collectors.groupingBy(e ->(e.getDate()),

             Collectors.maxBy((e1, e2) -> (int) (e1.getData() - e2. getData()))))

    .forEach((date, sensor) -> 
          System.out.println("" + date + " - " + sensor.map(Sensor:: getData).get()));
          //jTextField1.setText("" + date + " - " + sensor.map(Sensor:: getData).get()));  

}   
问题是当我使用
System.out.println(“+date+”-“+sensor.map(sensor::getData.get()))->将打印整个数据列表。
但是,我希望此列表显示在swing应用程序的文本字段中。当我使用
jTextField1.setText(“+date+”-“+sensor.map(sensor::getData.get()))->则只显示一天(最后一天)

为什么会这样? 如何在文本字段中打印整个列表。 提前谢谢你

然后只出现一天(最后一天)

为什么会这样

因为您迭代所有元素,并在最后一个名为
setText
的元素处退出循环

您可以很好地打印,因为所有元素都附加到输出缓冲区,其中
setText
只会将文本设置为您给定的值

您可以
收集
流到
列表
,然后使用
StringJoiner
“\n”
,最后调用
setText

使用详情:


(或者在
forEach
中使用
StringBulder
append
,并在其外部使用
setText

发生这种情况是因为
.forEach()
迭代流中包含的值

  • 对于控制台,每个条目都按顺序打印
  • 对于
    TextField
    ,该字段的文本在一行中设置了几次,每次都覆盖以前的值。这样,最后只剩下最后一个条目了
作为解决方案,您可以:

  • 将列表映射到
    列表
  • collect
    使用
    收集器收集值。加入(“\n”)
    ,获取
    字符串
  • text字段的
    setText()
    传递
    collect

谢谢。我使用了第二个建议。唯一的问题是:为什么它不允许我使用像这样的两个append命令:
builder.append(“+date+”-“+heatDetectorSensor.map(HeatSensor::getcentrics.get()).append(“\n”)