Tôi muốn thực hiện phương pháp sau:Làm cách nào để BigDecimals trung bình sử dụng Luồng?
public BigDecimal mean(List<BigDecimal> bigDecimals, RoundingMode roundingMode) {
BigDecimal sum = BigDecimal.ZERO;
int count=0;
for(BigDecimal bigDecimal : bigDecimals) {
if(null != bigDecimal) {
sum = sum.add(bigDecimal);
count++;
}
}
return sum.divide(new BigDecimal(count), roundingMode);
}
và cập nhật bằng cách sử dụng Luồng phát trực tiếp. Dưới đây là những gì tôi đã có, cho đến nay:
public BigDecimal average(List<BigDecimal> bigDecimals, RoundingMode roundingMode) {
BigDecimal sum = bigDecimals.stream()
.map(Objects::requireNonNull)
.reduce(BigDecimal.ZERO, BigDecimal::add);
long count = bigDecimals.stream().filter(Objects::nonNull).count();
return sum.divide(new BigDecimal(count), roundingMode);
}
Có cách nào để thực hiện việc này mà không cần phát trực tuyến hai lần (lần thứ hai để tính)?
các thể giảm chức năng ắc mất trong một tuple, một trong đó thể hiện tổng giá và người kia đếm? Havent nghiên cứu điều này xin lỗi – smk