IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Extraction de données depuis une ArrayList


Sujet :

Collection et Stream Java

  1. #1
    Membre régulier Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Points : 80
    Points
    80
    Par défaut Extraction de données depuis une ArrayList
    Bonjour,

    J'ai référencé dans une ArrayList un ensemble de fichiers présents dans un dossier de mon disque dur. Ces fichiers fonctionnent en triplet:
    codeIdentifiant_TYPE1.txt
    codeIdentifiant_TYPE2.txt
    codeIdentifiant_TYPE3.txt

    Il existe donc 3 fichiers de types différents (trois types en tout) pour chaque codeIdentifiant.

    Le but de mon programme est de vérifier si pour un code identifiant donné, les 3 types de fichiers sont bien présents dans mon arborescence (sans en avoir un de plus ou un de moins), et si oui, je renseigne une table de base de données, sinon, je ne fais rien.

    Seulement voilà, je me retrouve avec mon ArrayList avec tous mes fichiers, et je n'arrive pas à trouver une logique efficace pour réaliser mon programme.

    J'ai pensé dans un premier temps à convertir mon ArrayList en String et vérifier si pour chaque type de fichier j'ai bien pour un codeIDentifiant donné uniquement 3 fichiers de trois types différents. Mais les codeIdentifiants ne peuvent pas être connus à l'avance. Et là ça se complique.

    Si quelqu'un a une idée à me suggérer pour m'aider à démarrer je suis preneur, car pour le moment je ne vois pas par quel bout commencer !!

    Merci par avance pour vos retours.

    Thibault

  2. #2
    Membre régulier Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Points : 80
    Points
    80
    Par défaut
    J'ai avancé un peu depuis mon dernier post et je vais vous poser des questions un peu plus techniques:

    J'ai donc:
    - 1 ArrayList avec la liste de mes fichiers
    - 1 copie de mon ArrayList pour pouvoir travailler dessus
    - 1 Array list pour référencer les codeIdentifiants trouvés.

    L'algo devient donc le suivant:
    Je parcoure ma première liste, et en même temps je parcoure la seconde: j'ai réussi à extraire le code identifiant de l'objet de la première liste en cours d'étude et je le compare à tous les code identifiants des objets de la seconde liste. Si je trouve 3 occurences de mon code identifiant, j'alimente ma table de code identifiants. Au fur et à mesure que je traite mes objets de ma seconde liste, je les supprime de cette liste.

    J'ai donc réussi à obtenir un résultat qui n'est pas convaincant du fait que tous les codes identifiants n'apparaissent pas dans la table correspondante. En fouillant un peu, je me suis rendu compte que les codes traités apparaissaient dans cet ordre:

    id entrepot00001
    id entrepot00001
    id entrepot00002
    id entrepot00001
    id entrepot00002
    id entrepot00003
    id entrepot00003
    id entrepot00004
    id entrepot00003
    id entrepot00004
    id entrepot00005
    id entrepot00005
    id entrepot00006
    id entrepot00005
    id entrepot00006
    id entrepot00007
    id entrepot00007
    id entrepot00008
    id entrepot00007
    id entrepot00008

    Ce qui me pose problème au vue du traitement prévu dans mon code car il faudrait que les code de même id soient tous regroupés les uns derrière les autres, sinon ça ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    ArrayList<String> fichiersCopie = new ArrayList<String>();
    ArrayList fichiersCopie = new ArrayList();
    ArrayList<String> CodeEntrepotTeste = new ArrayList<String>();
    fichiersCopie = fichiers;
     
    String fichierEnCours = "";
    String fichierEnCoursCopie = "";
    String idEntrepot = "";
    String idEntrepotCopie = "";
    int cpt = 0;
     
     
    // Boucle sur la liste des fichiers
    for(int i=0; i<fichiers.size(); i++){
    	fichierEnCours = (String) fichiers.get(i);
    	// Extraction du code entrepot
    	idEntrepot = fichierEnCours.substring(0, fichierEnCours.indexOf("_"));
     
    	// Si le code entrepot n'a pas encore enregistré dans la table de controle je poursuis ma recherche dans l'ArrayList copiée
    	if(!CodeEntrepotTeste.contains(idEntrepot)) {
     
    		for(int j = 0; j<fichiersCopie.size(); j++){
    			fichierEnCoursCopie = (String) fichiersCopie.get(j);
    			idEntrepotCopie = fichierEnCoursCopie.substring(0, fichierEnCoursCopie.indexOf("_"));
    			disp("id entrepot" + idEntrepotCopie);
    			if(idEntrepotCopie.equalsIgnoreCase(idEntrepot)) {
    				cpt++;
    				if(cpt == 3) {
    					if(!CodeEntrepotTeste.contains(idEntrepot));
    						CodeEntrepotTeste.add(idEntrepot);
    					cpt = 0;
    				}
    			}
    			fichiersCopie.remove(j);
    		}
    	}	
    }
    Le problème vient donc du fait que les éléments n'apparaissent pas dans l'ordre dans lequel ils sont définis dans ma liste.
    J'ai essayé de trier ma liste avec:
    [CODE]Collection.sort(maListe)[;/CODE]
    Mais le problème est le même.

    Auriez-vous par hasard quelques idées ?

    Merci par avance pour votre aide.

    Thibault

  3. #3
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    J'ai lu très rapidement ton problème, et survolé le début du code.

    Il y a déjà un problème là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fichiersCopie = fichiers;
    En faisant ça, tu ne fais pas une copie de fichiers, tu ne fais que référencer sous un autre nom la même liste (en plus tu l'as instancié deux fois auparavant pour rien).
    Si tu veux avoir une vraie copie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List<String> fichiersCopie = new ArrayList<String>(fichiers);

  4. #4
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonjour
    j'ai parcouru votre post et je pense que la structure de données n'est pas vraiment appropriée
    A savoir je pense que vous devriez avoir une Map avec comme clé codeIdentifiants et pour chaque clé un objet associé qui contient la liste des fichier

    Par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Map<String,ListFile<String>> map = new HashMap<String,ListFile<String>>();
     
     
     
    List<String> list = new ArrayList<String>();
    list.add("fichier1.txt");
    list.add("fichier2.txt");
    list.add("fichier3.txt");
     
    ListFile<String> listFile = new ListFile<String>(list);
     
    map.put(identifiant,listFile);
    avec un classe ListFile

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class ListFile {
     
    List<String> listOfFile;
    //autres propriétés
     
    ListFile(List<String> _listOfFile){
      this.listOfFile = _listOfFile;
    }
     
     
    //éventuellement getters/setters et autres méthodes
    }

    et puis tu n'auras plus qu' à récupéré ta liste de ta map avec l'identifiant que tu veux et faire les contrôles que tu veux sur ta liste

    je ne sais pas si c'est ce que vous voulez ou si vous avez déjà résolu votre problème
    j'espère que ça va vous aider

  5. #5
    Inscrit

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Points : 892
    Points
    892
    Par défaut
    [QUOTE=isma4;5740171]Bonjour

    Je dirai la meme chose, ArrayList n'est pas adapté à cas, comme aussi il veut qu'ils soint les un apres les autres, je te conseillerai TreeMap appliqué au context de imas4, soit dans l'odre naturel ou dans un ordre implementé.

    Ou si le tri n'est pas important au debut, je dirai d'appeler Collections.sort(maliste) apres le parcour pour trier et echapper au temp de TreeMap.

  6. #6
    Membre régulier Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Points : 80
    Points
    80
    Par défaut
    Désolé j'ai un petit peu abandonné ce post... En fait, vu que c''était pour mettre en place un moteur de traitement de fichiers, et voir en temps réel les fichiers déjà traités et les fichiers non encore traités, j'ai construis une arborescence avec pour chaque entrepôt 3 dossier (inbox, ok, erreur) et je déplace les fichiers dans le bon dossier dès que son traitement est terminé. De cette manière, je n'ai plus à me casser la tête à savoir comment je fais pour déterminer quel fichier a été traité !!

    MErci en tout cas pour vos réponses

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 26/03/2011, 09h46
  2. Réponses: 1
    Dernier message: 03/02/2010, 13h38
  3. Extraction données d'une ArrayList
    Par Teb dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 10/04/2006, 17h42
  4. Exportation de données depuis une base
    Par david71 dans le forum JBuilder
    Réponses: 2
    Dernier message: 22/06/2004, 10h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo