package ecoparasite.nettoyage; import ecoparasite.completion.Completion; import ecoparasite.poisson.Poisson; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.function.BiConsumer; import java.util.function.Function; /** * Class Définissant les méthodes statics de Nettoyage des données */ public class Nettoyage { /* public static HashSet nettoiePoissonMean(HashSet tablePoisson){ Double mean = Completion.calculateMean(tablePoisson,Poisson::getInfestation); //Moyenne ArrayList infest = new ArrayList<>(); for (Poisson p : tablePoisson) { if (p.getInfestation() != null){ //Test des valeurs null pour les Tests Unitaires. Je ne devrais pas en avoir. infest.add(p.getInfestation()); } } Collections.sort(infest); int quartIndex = infest.size()/4; Double firstQuart = infest.get(quartIndex); Double thirdQuart = infest.get(quartIndex *3); Double IQR = thirdQuart - firstQuart; for (Poisson p : tablePoisson) { if (p.getInfestation() == null) { p.setInfestation(mean); //Fonction codé en dur pour éviter des problèmes dans les Tests Unitaires : Completion devrais etre fait et valeur null ne devrait pas exister } else { if (p.getInfestation() < firstQuart - (IQR * 1.5) || p.getInfestation() > thirdQuart + (IQR * 1.5)) { p.setInfestation(mean); } } } return tablePoisson; } */ /** * 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 nettoieColumnsMoyenne(HashSet list, Function getValue, BiConsumer setValue ){ Double mean = Completion.calculateMean(list, getValue); ArrayList array = new ArrayList<>(); for ( T item : list) { if (getValue.apply(item)!= null){ //Test des valeurs null pour les Tests Unitaires. Je ne devrais pas en avoir. array.add(getValue.apply(item).doubleValue()); } } Collections.sort(array); int quartIndex = array.size()/4; Double firstQuart = array.get(quartIndex); Double thirdQuart = array.get(quartIndex *3); Double IQR = thirdQuart - firstQuart; for(T item : list){ if( getValue.apply(item).doubleValue() < firstQuart - (IQR * 1.5) || getValue.apply(item).doubleValue() > thirdQuart + (IQR * 1.5)){ setValue.accept( item, (V) mean); } } return list; } }