1 回答

TA貢獻1784條經驗 獲得超9個贊
問題是您將thisYear元素放在循環的每次迭代中 for (Expenditure e : user.getExpenditures())。
我建議以其他方式重寫整個邏輯:在遍歷它們之前按年份對支出進行分組。
Map<Integer, List<Expenditure>> groups = expenditures.stream().collect(Collectors.groupingBy(e -> e.getDate().getYear()));
for (Entry<Integer, List<Expenditure>> entry : groups.entrySet()) {
thisYear = new Element("year");
thisYear.setAttribute("y", year + "");
entry.getValues().forEach( e -> {
Element expenditure = new Element("Expenditure");
expenditure.addContent(new Element("date")
.setText(Utils.getFormattedDateTime("dd-MM-yyyy", new DateTime(e.getDate()))));
expenditure.addContent(new Element("money").setText(e.getMonetaryAmount().toString()));
expenditure.addContent(new Element("description").setText(e.getDescription()));
expenditure.addContent(new Element("type").setText(e.getType().name()));
thisYear.addContent(expenditure);
});
doc.getRootElement().addContent(thisYear);
}
抱歉,如果有任何編譯錯誤,我沒有完整的代碼上下文。
添加回答
舉報