package eu.ztsh.lfr.model; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.DoubleAdder; public class YearDataAccumulator { private final DoubleAdder sum = new DoubleAdder(); private final AtomicInteger counter = new AtomicInteger(); public void add(double value) { synchronized (this) { sum.add(value); counter.incrementAndGet(); } } public BigDecimal getAverage() { return BigDecimal.valueOf(sum.sum()).setScale(2, RoundingMode.HALF_UP) .divide(BigDecimal.valueOf(counter.get()), RoundingMode.HALF_UP); } }