AbstractAggregatedValues.javaUne classe de base abstraite générique pour accumuler des valeurs agrégées dans le temps. Utilisée par le module de statistiques et spécifiquement par LiquidityForecast pour les calculs de délais de paiement pondérés. Les sous-classes (IntAggregatedValues, BigDecimalAggregatedValues) fournissent des implémentations spécifiques aux types.
Le paramètre générique <T> permet d'effectuer des opérations arithmétiques sur n'importe quel type numérique sans duplication de code. La classe stocke deux LinkedList parallèles — une pour les valeurs, une pour les poids — permettant à la fois des moyennes simples et des moyennes pondérées sur le même ensemble de données.
La classe implémente le patron Template Method. Les algorithmes principaux (getAverage(), getWeightedAverage()) sont définis dans la classe abstraite, tandis que l'arithmétique spécifique au type est déléguée aux sous-classes via six méthodes abstraites :
| Méthode abstraite | Objectif |
|---|---|
getZero() | Retourne l'élément neutre additif pour le type T (ex. 0 ou BigDecimal.ZERO) |
sum(T, T) | Additionne deux valeurs de type T |
convert(int) | Convertit un compte int en type T pour la division |
divide(T, T) | Divise la somme par le compte/poids |
multiply(T, T) | Multiplie la valeur par le poids (pour la moyenne pondérée) |
isZero(T) | Vérifie si une valeur est zéro (protège contre la division par zéro) |
Les résultats de average et weightedAverage sont calculés paresseusement et mis en cache à l'aide d'un indicateur de modification. Deux champs booléens (averageDirty, weightedAverageDirty) suivent si la valeur en cache est obsolète. L'appel à add() définit les deux indicateurs à true. Les valeurs en cache ne sont recalculées que lorsque getAverage() ou getWeightedAverage() est appelé et que l'indicateur correspondant est défini.
Cette optimisation évite de recalculer les moyennes à chaque ajout, ce qui est important lorsque de nombreuses valeurs sont ajoutées en séquence avant que la moyenne ne soit demandée.
Les surcharges de add() et clear() retournent this, permettant un chaînage fluide :
aggregatedValues.add(val1).add(val2, weight2).add(val3).getWeightedAverage();
Dans LiquidityForecast, cette classe est utilisée pour calculer le délai de paiement moyen pondéré sur plusieurs positions de facture. Chaque position apporte une valeur (montant) et un poids (jours jusqu'au paiement). La moyenne pondérée donne un délai de paiement représentatif unique pour la prévision.
868d6abb7 2025 -> 2026 63081666f En-têtes des fichiers source : 2024 -> 2025. b6092df09 Copyright 2023 -> 2024 ab45d51fa Copyright 2001-2022 -> 2001-2023. 5f7ef41b8 Copyright 2021 -> 2022 ceb63e8a1 En-tête du code source : (C) 2001-2021. 7c79f1922 Copyright de l'en-tête source -> 2020. 73a9755df Nettoyage de code : blocs catch réduits, opérateur diamant, StringBuilder, list.sort 000ca723d Suppression des expressions booléennes inutiles (business) dd5ca38ac Copyright de tous les en-têtes de fichiers Java mis à jour ou créés.