[英]ArrayList and Formatter not behaving as expected
我有两个Arraylist,一个包含整个对象列表,第二个包含要从第一个列表中删除的对象。
当我从第一个列表中删除对象并且使用格式化程序将这些对象输出到文件时,没有任何内容写入该文件。 但是,如果我从第一个Arraylist输出对象,而没有删除任何对象,则所有这些对象都会出现在文件中。
例如:-
for(Invoice inv : tempStore)
{
if(invoiceLines.contains(inv))invoiceLines.remove(inv);
}
//for each invoice in the ArrayList
for(Invoice invoice : invoiceLines)
{
output.format("%"+this.spec.getLength("XXXX")+"s\t",checkString(invoice.getInvoiceDate()));}
给我没有任何输出,但是只做:-
//for each invoice in the ArrayList
for(Invoice invoice : invoiceLines)
{
output.format("%"+this.spec.getLength("XXXX")+"s\t",checkString(invoice.getInvoiceDate()));}
给我输出信息,当手动调试应用程序时,arraylist(除去对象的那个)确实包含对象,并且这些对象包含正确的值。 一旦删除对象,就好像Arraylist失去了内存中的指针一样。
有任何想法吗? 不幸的是,我对特定代码的处理方式不多,但是提出任何问题,我将尽力回答。 语言是Java,我在SDK中使用的是Java规范1.5。
要确定错误,可以在删除操作上添加更多输出(作为控制台输出或使用Logger):
System.out.println("Items before removal: " + invoiceLines.size());
for(Invoice inv : tempStore)
{
if(invoiceLines.contains(inv)) {
invoiceLines.remove(inv);
System.out.println("removed " + inv + ". Items left: " + invoiceLines.size());
}
}
如果在一次迭代中删除的项目不止一个,则需要检查Invoice类的equals()和hashCode()实现。 如果您有自己的实现,请确保遵循Object.equals()-Contract 。
在输出末尾需要调用Formatter.flush()
和Formatter.close()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.