Java 仅显示最后一个元素的ArrayList

Java 仅显示最后一个元素的ArrayList,java,arraylist,Java,Arraylist,ArrayList复制最后一个值 ArrayList<CalanderQueryOutput> results = new ArrayList<CalanderQueryOutput>(); List<?> eventsToday = (List<?>) filter.filter(calendar.getComponents(Component.VEVENT)); CalanderQueryOutput caldavOutput = new C

ArrayList复制最后一个值

ArrayList<CalanderQueryOutput> results = new ArrayList<CalanderQueryOutput>();

List<?> eventsToday = (List<?>) filter.filter(calendar.getComponents(Component.VEVENT));
CalanderQueryOutput caldavOutput = new CalanderQueryOutput();

for (Iterator<?> i = eventsToday.iterator(); i.hasNext();) {
 Component component = (Component) i.next();
 {
  String Created=component.getProperty(Property.CREATED).toString().trim();
  String Summary = component.getProperty(Property.SUMMARY).toString().trim();

  caldavOutput.CREATED_DATE = Created;
  caldavOutput.Summary = Summary;

 }
 results.add(caldavOutput); 
}

您应该将其放入循环中:

CalanderQueryOutput caldavOutput = new CalanderQueryOutput();
否则,您将始终修改相同的
caldavOutput
对象

您的总是放置相同的元素并对其进行修改,并且该元素保留您最后给出的值。这就是为什么您认为最后一个元素只是输出

所以你应该:

for (Iterator<?> i = eventsToday.iterator(); i.hasNext();) {
   Component component = (Component) i.next();{
   String Created=component.getProperty(Property.CREATED).toString().trim();
   String Summary = component.getProperty(Property.SUMMARY).toString().trim();


   CalanderQueryOutput caldavOutput = new CalanderQueryOutput(); // Here
   caldavOutput.CREATED_DATE = Created;
   caldavOutput.Summary = Summary;

  }
  results.add(caldavOutput); 
}
for(迭代器i=eventsToday.Iterator();i.hasNext();){
组件=(组件)i.next(){
String Created=component.getProperty(Property.Created.toString().trim();
字符串摘要=component.getProperty(Property.Summary).toString().trim();
CalAnderQueryYoutPut caldavOutput=新CalAnderQueryYoutPut();//此处
caldavOutput.CREATED_DATE=已创建;
caldavOutput.Summary=摘要;
}
结果。添加(caldavOutput);
}

问题在于,您只创建了一个CalenderQueryOutput,您可以对其进行修改并读取到列表中。您需要创建一个新对象

for (Iterator<?> i = eventsToday.iterator(); i.hasNext();) {
    Component component = (Component) i.next();
    String Created=component.getProperty(Property.CREATED).toString().trim();
    String Summary = component.getProperty(Property.SUMMARY).toString().trim();

    CalanderQueryOutput caldavOutput = new CalanderQueryOutput();

    caldavOutput.CREATED_DATE = Created;
    caldavOutput.Summary = Summary;
    results.add(caldavOutput); 
}
for(迭代器i=eventsToday.Iterator();i.hasNext();){
组件=(组件)i.next();
String Created=component.getProperty(Property.Created.toString().trim();
字符串摘要=component.getProperty(Property.Summary).toString().trim();
CalAnderQueryYoutPut caldavOutput=新的CalAnderQueryYoutPut();
caldavOutput.CREATED_DATE=已创建;
caldavOutput.Summary=摘要;
结果。添加(caldavOutput);
}

将此项放入循环中

CalanderQueryOutput caldavOutput = new CalanderQueryOutput();

我已经测试过它没有改变我已经测试过它没有改变,请帮助我不仅仅是修改列表我日历查询你是的,谢谢你它正在工作。非常感谢您了解caldavOutput.CREATED_DATE=CREATED;正在修改对象。您最初所做的是创建一个对象并将其添加到列表中,然后修改该对象(从而修改列表中已有的对象),然后再次将ti添加到列表中。现在列表有两个引用,都指向同一个对象。最后,您有一个n个引用的列表,所有引用都指向同一个对象,当然该对象具有上次修改的值。
CalanderQueryOutput caldavOutput = new CalanderQueryOutput();