diff --git a/UML/classes.png b/UML/classes.png index 7fef5e7..c860976 100644 Binary files a/UML/classes.png and b/UML/classes.png differ diff --git a/UML/classes.puml b/UML/classes.puml index 59124fb..355dcb9 100644 --- a/UML/classes.puml +++ b/UML/classes.puml @@ -117,6 +117,12 @@ namespace ecoparasite { } } + namespace ecoparasite.completion { + class Completion { + + {static} completeColumnsMoyenne + } + } + namespace ecoparasite.unknown { note top of ecoparasite.unknown : Ce paquet est temporaire pour des classes / interfaces qui devront avoir plus de déclinaisons. diff --git a/src/ecoparasite/completion/Completion.java b/src/ecoparasite/completion/Completion.java index d6d4113..6ac2565 100644 --- a/src/ecoparasite/completion/Completion.java +++ b/src/ecoparasite/completion/Completion.java @@ -1,41 +1,67 @@ package ecoparasite.completion; +import ecoparasite.input.InputFactory; +import ecoparasite.input.InputFileException; +import ecoparasite.input.RawData; +import ecoparasite.input.RawDataOverflow; +import ecoparasite.poisson.Mackerel; import ecoparasite.poisson.Poisson; import java.util.HashSet; - +import java.util.concurrent.Callable; +import java.util.function.*; /** - * Class incluant des méthodes Statiques de Completion des données + * Permet de faire de la complétion de données. + * Si une valeur est manquante, elle sera remplacé par la moyenne ou par regression linéaire. */ public class Completion { + /** + * Permet de remplacer les valeurs inexistantes d'un paramètre d'un HashSet par la moyenne des autres valeurs (non nulles). + * Exemple d'utilisation : T = Poisson, V = Double, getValue = Poisson::getInfestation, setValue = Poisson::setInfestation. + * + * @param list La liste de données cobaye. + * @param getValue La fonction (Getter) qui permet d'obtenir la valeur que l'on veut vérifier + * @param setValue La fonction (Setter) qui permet de remplacer la valeur si null. + * @return Le HashSet avec les valeurs remplacés. + * @param Le type de données cobaye. Exemple : Poisson, Population + * @param Le type de la donnée à vérifier, doit être un Wrapper Number. Exemple : Double. + */ + public static HashSet completeColumnsMoyenne(HashSet list, Function getValue, BiConsumer setValue ){ - public static HashSet completePoissonMean(HashSet tablePoisson){ - - Double mean = mean(tablePoisson); - - for (Poisson p : tablePoisson) { - if ( p.getInfestation() == null ) { - p.setInfestation(mean); + Double mean = calculateMean(list, getValue); + for(T item : list){ + if( getValue.apply(item) == null ){ + setValue.accept( item, (V) mean); } } - return tablePoisson; + return list; } - private static Double mean(HashSet tablePoisson){ + /** + * Permet de calculer la moyenne d'une donnée des valeurs non nulles. + * @param list La liste de données cobaye. + * @param getValue La fonction qui permet d'obtenir la valeur de notre champ. + * @return La moyenne calculé. + * @param Le type de données cobaye/ Exemple : Poisson + * @param Le type de la donnée à vérifier, doit être un wrapper Number. Exemple : Double. + */ + public static double calculateMean(HashSet list, Function getValue ){ - Double mean = 0.0; + double mean = 0.0; + int i = 0; - for (Poisson p : tablePoisson){ - if (p.getInfestation() != null) { - mean += p.getInfestation(); + for( T item : list ){ + V value = getValue.apply(item); + if( value != null) { + mean += value.doubleValue(); + i++; } } - return mean / tablePoisson.size(); + return mean / i; } - } diff --git a/tests/ecoparasite/completion/CompletionTest.java b/tests/ecoparasite/completion/CompletionTest.java index 13ec1da..fa4b8b6 100644 --- a/tests/ecoparasite/completion/CompletionTest.java +++ b/tests/ecoparasite/completion/CompletionTest.java @@ -9,6 +9,8 @@ import ecoparasite.poisson.Poisson; import org.junit.jupiter.api.Test; import java.util.HashSet; +import java.util.function.BiConsumer; +import java.util.function.Function; import static org.junit.jupiter.api.Assertions.*; @@ -23,8 +25,10 @@ class CompletionTest { System.out.println(testp); - testp = Completion.completePoissonMean(testp); + Function getInfes = Poisson::getInfestation; + BiConsumer setInfes = Poisson::setInfestation; + testp = Completion.completeColumnsMoyenne(testp,getInfes,setInfes); System.out.println(testp); } } \ No newline at end of file