У меня небольшая проблема с лямбдами. Как я могу перебирать его и добавлять значение каждой итерации к моей переменной currentLateAmountDouble?Java 8 лямбда-агрегат
BigDecimal currentLateAmountDouble = BigDecimal.ZERO;
Collection<VPO> lines = BO_Contract.getLines(trxName, contractVPO.getID(), RContractLine.LineNo + " ASC ", ctx);
if (lines != null && !lines.isEmpty()) {
if (lines.stream()
.filter(line -> onDate.compareTo(line.getDateValue(RContractLine.TermDate)) > 0) != null) {
lines.forEach(line -> currentLateAmountDouble = currentLateAmountDouble.add(NumberUtils.getAmount(line.getDoubleValue(RContractLine.TotalAmountOpen))));
}
}
Это дает мне ошибку на 5-й линии:
Локальная переменная currentLateAmountDouble определена в области видимости должно быть окончательным или эффективно окончательным
Тот же метод в Java 7 (работ):
BigDecimal currentLateAmountDouble = BigDecimal.ZERO;
Collection<VPO> lines = BO_Contract.getLines(trxName, contractVPO.getID(), RContractLine.LineNo + " ASC ", ctx);
if (lines != null && !lines.isEmpty()) {
for (VPO line : lines) {
if (onDate.compareTo(line.getDateValue(RContractLine.TermDate)) > 0) {
currentLateAmountDouble = currentLateAmountDouble.add(NumberUtils.getAmount(line.getDoubleValue(RContractLine.TotalAmountOpen)));
}
}
}
EDI Т: Решен! Ходили с раствором @JBNizet и сделал это так:
currentLateAmountDouble = lines.stream().filter(line -> onDate.compareTo(line.getDateValue(RContractLine.TermDate)) > 0)
.map(line -> NumberUtils.getAmount(line.getDoubleValue(RContractLine.TotalAmountOpen))).reduce(BigDecimal.ZERO, BigDecimal::add);