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 :

Concaténer deux vectors et éliminer les doublons


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 59
    Points : 62
    Points
    62
    Par défaut Concaténer deux vectors et éliminer les doublons
    Bonjour,
    Voilà j'ai écris ce petit bout de code, qui simule une jointure de deux fichiers .txt qui contiennent chacun 10 caractères (char), on commence par la lecture des deux fichiers, insérer les caractères de chacun des deux fichiers dans deux vecteurs correspondants, ensuite j'implémente une boucle qui aura pour but de trouver les caractères en commun entre ces deux vecteurs et les mettre dans un troisième vecteur.

    mon objectif est de remplacer la boucle par une ou même deux méthodes propres à la classe VECTOR

    mais je ne trouve pas

    qui pourrais m'aider??voilà le code qui soit dit en passant marche trés bien, mais le travail demandé est d'utiliser la classe vector plutot qu'une boucle

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    package TP1;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileInputStream;
    import java.io.FileWriter;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.util.Vector;
     
    public class Jointure {
    	/** Lecture du fichier text avec récupération de chacun des caractères dans un vecteur*/
    	public static Vector<Character> readTab(String fichsource){
    		Vector<Character> tableau=new Vector<Character>();
    		try{
    			InputStream ips=new FileInputStream(fichsource); 
    			InputStreamReader ipsr=new InputStreamReader(ips);
    			BufferedReader br=new BufferedReader(ipsr);
    			String ligne;
    			while ((ligne=br.readLine())!=null)
    				if(ligne.length() > 0) 
    					tableau.add(ligne.charAt(0));
    			br.close();
    			System.out.println("Lecture du fichier "+fichsource+" ...Réussie");
    		}
    		catch (Exception e){
    			System.out.println(e.toString());
    		}
    		return tableau;
    	}
     
    	/**je fais ma jointure : */
    	public static Vector<Character> jointure1(Vector<Character> tableau1, Vector<Character> tableau2){
    		Vector<Character> res = new Vector<Character>();	
    		for(int i=0; i<tableau1.size(); i++)
    			for(int j=0; j<tableau2.size(); j++)
    				if(tableau1.elementAt(i).equals(tableau2.elementAt(j))) 
    					res.add(tableau1.elementAt(i));
    		return res;
    	}
     
    	/** Ecriture du résultat de jointure dans un fichier T.text*/
    	public static void ecrireFichier(Vector<Character> table, String fichdest){
    		String chaine="";
    		for(int i=0; i<table.size(); i++)
    			chaine += (table.elementAt(i)+"\n");
    		try{
    			FileWriter fw = new FileWriter (fichdest);
    			BufferedWriter bw = new BufferedWriter(fw);
    			PrintWriter fichierSortie = new PrintWriter(bw); 
    			fichierSortie.println (chaine); 
    			fichierSortie.close();
    			System.out.println("Le fichier " + fichdest + " a été créé !"); 
    		}
    		catch (Exception e){
    			System.out.println(e.toString());
    		}		
    	}
     
     
    	public static void main(String[] args){
    		Vector<Character> tableauR = readTab("R.txt");
    		Vector<Character> tableauS = readTab("S.txt");
    		Vector<Character> tableT = jointure1(tableauR, tableauS);
    		System.out.println("Le Résulat de la jointure est le suivant "+tableT);
    		ecrireFichier(tableT, "T.txt");
    	}
    }

  2. #2
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 59
    Points : 62
    Points
    62
    Par défaut
    c'est bon, j'ai trouvé merci quand même

    la méthode retainAll suffit

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Pour info, ça s'appelle ni la jointure ni l'élimination de doublons, ça s'appelle l'intersection.

    Normalement on ferait ça avec des HashSet plutôt que des Vector, c'est leur boulot d'être des Set et donc de ne pas contenir de doublon, et d'avoir des éléments faciles à trouver.

    Au passage de toute façon on n'utilise plus les Vector, on les remplace par ArrayList. C'est plus au goût du jour et ça évite des synchronisations inutiles.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 59
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Pour info, ça s'appelle ni la jointure ni l'élimination de doublons, ça s'appelle l'intersection.

    Normalement on ferait ça avec des HashSet plutôt que des Vector, c'est leur boulot d'être des Set et donc de ne pas contenir de doublon, et d'avoir des éléments faciles à trouver.

    Au passage de toute façon on n'utilise plus les Vector, on les remplace par ArrayList. C'est plus au goût du jour et ça évite des synchronisations inutiles.
    EUUHHHH , au faite c'est l'objet de mon TP, l"utilisation de la classe VECTOR nous a été imposée , , et pour ce qui est de la nomination de la jointure, bein, c'est aussi le sujet du TP , reproduire une sorte de jointure de bas niveau , simuler si tu veux !! sur des fichiers .txt, c'est en gros un produit cartésien + une sélection

    alors c'est pour celà que j'emploie tout ça



    voilà merci

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 59
    Points : 62
    Points
    62
    Par défaut
    Et maintenant j'ai un problème plus gros encore, je n'arrive pas à lire mon fichier txt qui ne contient que 10 caractères dans mon tableau !!
    svp c'est quoi le problème???
    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
    39
    40
    package TP3;
     
    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.io.InputStreamReader;
     
    public class JoinArray {
     
    	/** Lecture du fichier text avec récupération de chaque  caractère dans un Array*/
    	public static char [] readTab(String fichsource){
    		char tableau[] = new char[10];
    		try{
    			InputStream ips=new FileInputStream(fichsource); 
    			InputStreamReader ipsr=new InputStreamReader(ips);
    			BufferedReader br=new BufferedReader(ipsr);
    			String ligne;
     
    			while ((ligne=br.readLine())!=null)
    				if(ligne.length() > 0) {
    					for (int i=0; i < 10; i++ ){
    				         tableau[i]=(ligne.charAt(0));   
    				      }
     
    			br.close();
    			System.out.println("Lecture du fichier "+fichsource+" ...Réussie");
    		}
    		}
    		catch (Exception e){
    			System.out.println(e.toString());
    		}
    		return tableau;
    	}
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    char []TableauR=readTab("R.txt");
    System.out.println(TableauR);
    	}
     
    }

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par masoum Voir le message
    EUUHHHH , au faite c'est l'objet de mon TP, l"utilisation de la classe VECTOR nous a été imposée , , et pour ce qui est de la nomination de la jointure, bein, c'est aussi le sujet du TP , reproduire une sorte de jointure de bas niveau , simuler si tu veux !! sur des fichiers .txt, c'est en gros un produit cartésien + une sélection

    alors c'est pour celà que j'emploie tout ça
    Oui, bon, tu as fait ce que ton prof t'a demandé et ça c'est bien en soi.

    Maintenant, pour les autres, ceux qui sont pas dans ton cas et qui liraient ça, et puis aussi pour ta culture personnelle, j'informe qu'il faudrait plutôt utiliser des HashSet.

    Quant à ton prof, je peux comprendre qu'il vous fasse pas utiliser des Set, pédagogie, apprendre les algorithmes, tout ça. Mais Vector il est vraiment pas à jour, un énoncé de moins de 10 ans utiliserait plutôt ArrayList.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 504
    Points : 7 840
    Points
    7 840
    Par défaut
    Citation Envoyé par masoum Voir le message
    Et maintenant j'ai un problème plus gros encore, je n'arrive pas à lire mon fichier txt qui ne contient que 10 caractères dans mon tableau !!
    svp c'est quoi le problème???
    Bonjour masoum,

    Je crois que:
    1) Tu devrais soit diminuer le nombre de caractères de ton fichier à 9, soit augmenter la taille du tableau à 11. Le plus propre ce serait d'allouer la taille du tableau par rapport à la taille de la chaîne à lire.
    2) Tu essaies de lire le même caractère, essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableau[i] = ligne.charAt(i);
    Chaque fois que tu dis "je ne peux pas", n'oublie pas d'ajouter le mot "encore".

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

Discussions similaires

  1. Distinct - éliminer les doublons
    Par chris801 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 27/03/2007, 23h22
  2. comment éliminer les doublons
    Par fk04 dans le forum Requêtes
    Réponses: 1
    Dernier message: 09/08/2006, 17h22
  3. Éliminer les doublons d'une BDD MySQL
    Par sansouna24 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 21/05/2006, 11h26
  4. Réponses: 2
    Dernier message: 12/05/2006, 08h35
  5. [sql] [oracle] éliminer les doublons dans sum ?
    Par trungsi dans le forum Langage SQL
    Réponses: 14
    Dernier message: 04/03/2005, 12h29

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