Tôi có một số List<LedgerEntry> ledgerEntries
và tôi cần tính số tiền của creditAmount và debitAmount.Java 8 Tổng hai thuộc tính đối tượng trong một lần lặp
class LedgerEntry{
private BigDecimal creditAmount;
private BigDecimal debitAmount;
//getters and setters
}
Tôi đã thực hiện điều này như,
BigDecimal creditTotal = ledgeredEntries.stream().map(p ->p.getCreditAmount()).
reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal debitTotal = ledgeredEntries.stream().map(p ->p.getDebitAmount()).
reduce(BigDecimal.ZERO, BigDecimal::add);
//...
//Use creditTotal, debitTotal later
này trông giống như tôi đang iterating trên danh sách hai lần. Có cách nào để thực hiện việc này một lần mà không cần phải làm ướt danh sách hai lần không?
Pre Java 8 phiên bản
BigDecimal creditTotal = BigDecimal.ZERO;
BigDecimal debitTotal = BigDecimal.ZERO;
for(LedgerEntry entry : ledgerEntries){
creditTotal = creditTotal.add(entry.getCreditAmount());
debitTotal = debitTotal.add(entry.getDebitAmount());
}
Tại sao bạn muốn sử dụng dòng? Phiên bản "Pre Java 8" của bạn cũng là Java 8% hợp lệ và (khi được sửa cho thực tế là nó không thực sự làm bất cứ điều gì vì 'BigDecimal' là bất biến) dễ đọc hơn và dễ bảo trì hơn (và có thể thực hiện được nhiều hơn) giải pháp cố gắng tính hai khoản tiền cùng một lúc. – Hoopje
@KrazyKalle: Cảm ơn. đã chỉnh sửa – Krishan
@KrazyKalle. Vâng. Bạn nghĩ gì tôi có ý nghĩa với câu giữa các dấu ngoặc đơn (khi cố định ... bất biến)? – Hoopje