我有两个Arraylists,一个包含整个对象列表,第二个包含要从第一个列表中删除的对象。
当我从第一个列表中删除对象时,当我使用Formatter将这些对象输出到文件时,没有任何内容写入该文件。但是,如果我从第一个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 compliance 1.5。
答案 0 :(得分:0)
要识别错误,您可以在删除操作中添加更多输出(作为控制台输出或使用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。
答案 1 :(得分:0)
Formatter.flush()
和Formatter.close()
。