AbstractAggregatedValues.javaUna clase base abstracta genérica para acumular valores agregados a lo largo del tiempo. Utilizada por el módulo de estadísticas y específicamente por LiquidityForecast para cálculos de tiempo de pago promedio ponderado. Las subclases (IntAggregatedValues, BigDecimalAggregatedValues) proporcionan implementaciones específicas de tipo.
El parámetro genérico <T> permite operaciones aritméticas en cualquier tipo numérico sin duplicación de código. La clase almacena dos LinkedList paralelas — una para valores, otra para pesos — permitiendo tanto promedios simples como promedios ponderados sobre el mismo conjunto de datos.
La clase implementa el patrón Método Plantilla. Los algoritmos centrales (getAverage(), getWeightedAverage()) se definen en la clase abstracta, mientras que la aritmética específica de tipo se delega a las subclases mediante seis métodos abstractos:
| Método abstracto | Propósito |
|---|---|
getZero() | Devuelve la identidad aditiva para el tipo T (ej. 0 o BigDecimal.ZERO) |
sum(T, T) | Suma dos valores de tipo T |
convert(int) | Convierte un conteo int al tipo T para división |
divide(T, T) | Divide la suma por el conteo/peso |
multiply(T, T) | Multiplica el valor por el peso (para promedio ponderado) |
isZero(T) | Verifica si un valor es cero (protege contra división por cero) |
Tanto los resultados de average como de weightedAverage se calculan de forma diferida y se almacenan en caché utilizando un patrón de bandera de suciedad. Dos campos booleanos (averageDirty, weightedAverageDirty) rastrean si el valor en caché está obsoleto. Llamar a add() establece ambas banderas de suciedad a true. Los valores en caché solo se recalculan cuando se llama a getAverage() o getWeightedAverage() y la bandera de suciedad respectiva está establecida.
Esta optimización evita recalcular promedios en cada adición, lo cual es importante cuando se agregan muchos valores en secuencia antes de consultar el promedio.
Ambas sobrecargas de add() y clear() devuelven this, permitiendo encadenamiento fluido:
aggregatedValues.add(val1).add(val2, weight2).add(val3).getWeightedAverage();
En LiquidityForecast, esta clase se utiliza para calcular el tiempo de pago promedio ponderado en múltiples posiciones de factura. Cada posición contribuye con un valor (monto) y un peso (días hasta el pago). El promedio ponderado produce un único tiempo de pago representativo para la previsión.
868d6abb7 2025 -> 2026 63081666f Encabezados de archivos fuente: 2024 -> 2025. b6092df09 Derechos de autor 2023 -> 2024 ab45d51fa Derechos de autor 2001-2022 -> 2001-2023. 5f7ef41b8 Derechos de autor 2021 -> 2022 ceb63e8a1 Encabezado de código fuente: (C) 2001-2021. 7c79f1922 Derechos de autor del encabezado fuente -> 2020. 73a9755df Limpieza de código: bloques catch colapsados, operador diamante, StringBuilder, list.sort 000ca723d Eliminar expresiones booleanas sin sentido (negocio) dd5ca38ac Derechos de autor de todos los encabezados de archivos Java actualizados o creados.