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 :

afficher l'arborescence d'un chemin avec LinkedHashMap


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 14
    Par défaut afficher l'arborescence d'un chemin avec LinkedHashMap
    bonjour,
    tout d'abord je vais commencé à parler du but de ce que je veux faire.
    j'ai par exemple 2 chemins "a/b/c1" et "a/b/c2" et je voudrais les afficher de cette façon à garder la notion de père et fils donc comme ça:
    a
    _____b
    __________c1
    __________c2
    j'ai créer une classe Tag qui définit le type des feuilles de cette arbre
    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
     
     
    import java.util.LinkedHashMap;
     
    public class Tag {
     
    	private String name;
    	private LinkedHashMap <String, Tag> tags = new LinkedHashMap <String, Tag> ();
     
    	public Tag(){
     
    	}
        public Tag(String name){
    		this.name = name;
    	}
     
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public LinkedHashMap<String, Tag> getTags() {
    		return tags;
    	}
    	public void setTags(LinkedHashMap<String, Tag> tags) {
    		this.tags = tags;
    	}
     
     
     
    }
    donc je voudrais créer une méthode qui prends ces 2 chemins les découpes en feuilles de type Tag et les afficher comme voulue.
    Merci.

  2. #2
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    Et sur quoi tu bloques ?

    comme tu t'en doute, si tu ne pose pas de question, tu n'auras pas beaucoup de réponse ...

    Où en est tu ?

  3. #3
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 14
    Par défaut
    voici ma class
    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
     
    public class XslGenerator {
    private LinkedHashMap<String, Tag> tmap = new LinkedHashMap<String, Tag> ();
     
    public void generate (Writer writer, List<SimplifiedModel> mappings, String rootelt) throws IOException {
    for (SimplifiedModel model : mappings) {
    			taggenerator( model );
    		}
    		for (Iterator<Tag> v = tmap.values().iterator() ; v.hasNext() ;){
                System.out.println(v.next().getName()); 
            } 
    }
    private void taggenerator(SimplifiedModel model) throws IOException {
    		String s = model.getSource ();
    		StringTokenizer sts = new StringTokenizer(s,"/");
    		String n ; String m;
     
    		n = sts.nextToken();
    		Tag t1 = new Tag();
    		if (!tmap.containsKey(n))
    		{
    			t1.setName(n);
    			tmap.put(n,t1);
    		}
     
    		while(sts.hasMoreTokens())
            {
     
    			m = sts.nextToken();
    			if (!t1.getTags().containsKey(m))
    			{
    				Tag t2 = new Tag(m);
    				tmap.put(m,t2);
    				t1.setTags(tmap);
    				t1=t2;
    			}
            }
     
    	}
     
    public static void main(String[] args) throws IOException {
    		FileWriter writer = new FileWriter ("test.xsl");
    		String rootelt = "root"; 
    		List<SimplifiedModel> mappings = new ArrayList<SimplifiedModel> ();
    		mappings.add ( new SimplifiedModel ("a/b/c","r1/k"));
    		mappings.add ( new SimplifiedModel ("a/b/e/tt/h","r2/k/d"));
    		mappings.add ( new SimplifiedModel ("s/c/b","ro/kd"));
    		new XslGenerator().generate(writer, mappings,rootelt);
    	}
    }
    et voici la class SimplifiedModel :
    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
    public class SimplifiedModel {
     
    		private String source;
    		private String destination;
     
    		public SimplifiedModel(){
    		}
     
    		public SimplifiedModel(String source, String destination){
    			this.source = source;
    			this.destination = destination;
    		}
     
    		public String getDestination() {
    			return destination;
    		}
    		public void setDestination(String destination) {
    			this.destination = destination;
    		}
    		public String getSource() {
    			return source;
    		}
    		public void setSource(String source) {
    			this.source = source;
    		}
    }
    S'il vous le problème est dans la méthode Taggenarator,
    je ne sais pas comment traiter le cas par exemple "a/b/c1" et "a/b/c2"
    donc le Tag de "a" doit être créer une seul fois et son tags(fils) est "b", mais "b" doit avoir comme tags(fils) c1 et c2.
    si vous avez besoin de plus de détails dites le moi et merci encore.

  4. #4
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    bon j'ai pas tout compris et j'ai un peu la flemme de rentrer dans le code ...

    Déjà il faudrait que tu fasses un else je pense

    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
    n = sts.nextToken();
    Tag t1 = new Tag();
    if (!tmap.containsKey(n)){
    	t1.setName(n);
    	tmap.put(n,t1);
    } 
     
    while(sts.hasMoreTokens()){
    	m = sts.nextToken();
    	if (!t1.getTags().containsKey(m)){
    		Tag t2 = new Tag(m);
    		tmap.put(m,t2);
    		t1.setTags(tmap);
    		t1=t2;
    	} else { // à mon avis il faut faire quelque chose ici
                       // genre (mais je suis pas sûr vu que j'ai pas tout compris)
                    t1 = tmap.get(m);
            }
    }
    je sais pas trop ce que tu veux faire mais ça parait compliqué. enfin je pense que tu te compliques les choses pour rien.

    Tu veux juste écrire dans un fichier en gardant la notion d'arborescence ?

Discussions similaires

  1. Monter dans l'arborescence d'un chemin relatif avec ThisWorkBook.Path
    Par LimsWolf dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/08/2012, 13h41
  2. Réponses: 5
    Dernier message: 12/01/2010, 13h23
  3. Afficher une arborescence d'un chemin (sous forme JTRee)
    Par thaundeadboss dans le forum Langage
    Réponses: 9
    Dernier message: 03/12/2009, 11h27
  4. afficher la barre de menus complète avec vba
    Par jejestyle dans le forum Access
    Réponses: 7
    Dernier message: 07/09/2006, 18h07
  5. shellexecute + chemin avec espace
    Par abignon dans le forum MFC
    Réponses: 2
    Dernier message: 26/01/2004, 22h15

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