package ecoparasite.input; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; /** * Permet de stocker les données brutes d'un fichier chargé CSV, avant d'être changé en Classe plus spécifique. */ public class RawData { /** * Stocke les données brutes sous formes de deux ArrayList. */ final private ArrayList> data; /** * Constructeur. * @param data ArrayList qui demande des ArrayList pour faire des lignes/colonnes. */ public RawData(ArrayList> data) { this.data = data; } /** * Getter des données brutes. À n'utiliser que pour des opérations compliquées non descriptibles par une fonction. * @return ArrayList d'ArrayList de String qui contient les données brutes. */ public ArrayList> getData() { return data; } /** * Permet d'avoir un affichage debug du contenu de notre jeu de données. * @return La string symbolisant nos données. */ @Override public String toString() { StringBuilder sb = new StringBuilder(); for( int i = 0; i < data.size(); i++ ) { ArrayList row = data.get(i); for( int j = 0; j < row.size(); j++ ){ sb.append(row.get(j)).append(" | "); } sb.append(System.lineSeparator()); } return sb.toString(); } /** * Permet d'obtenir le nom des colonnes de notre jeu de données. * * @return HashSet du nom des colonnes */ public HashSet getColumnsNames(){ HashSet columns = new HashSet<>(); for (ArrayList row : data) { for (String colName : row) { columns.add(colName); break; } } return columns; } /** * Permet d'avoir toutes les valeurs associées à la colonne. * @param colName Le nom de la colonne dans le fichier CSV * @return HashSet des données brutes. */ public HashSet getDataFromColumn( String colName ){ boolean goodColumn = false; HashSet rows = new HashSet<>(); for( ArrayList row : data ){ for( String value : row ) { if( !goodColumn ) { if (colName.equals(value)) goodColumn = true; else break; } else { // Si on a trouvé la bonne colonne, on ajoute les éléments. rows.add(value); } } if( goodColumn ) break; } return rows; } /** * Permet d'obtenir tous les champs d'une entrée. * @param index Entrée que vous voulez obtenir, le minimum est l'entrée 1. Le maximum dépend du Dataframe. * @return Une HashMap . * @throws RawDataOverflow Si vous avez dépasses le maximum d'entrées du DataFrame. */ public HashMap getEntry(int index) throws RawDataOverflow { if( index <= 0 ){ index = 1; // 0 = nombre de colonnes, fallback. } HashMap entry = new HashMap<>(); for( ArrayList row : data ){ if( index > row.size()){ throw new RawDataOverflow( index, row.size() ); } entry.put( row.getFirst(), row.get( index ) ); } return entry; } }