2017-05-17 5 views
1

J'ai une liste de n chemins et je veux créer une hiérarchie (arborescence avec des objets).Trier les chemins en Java vers une hiérarchie

E.g. chemins:

/src/main/java/tools/mockfile/generator/data/RecordPart.java 
/src/main/java/tools/mockfile/generator/Analyzer.java 
/src/main/java/tools/mockfile/test/Menu.java 
... 

petite Hiérarchie:

mockfile 
    ├── generator 
    │ ├── data 
    │ │ └── RecordPart.java 
    │ └── Analyzer.java 
    └── test 
     ├── Menu.java 
     └── ... 

Y at-il Bibliothèque ou d'une méthode qui pourrait me aider à trier les chemins vers une hiérarchie? Ou est la seule façon de diviser les cordes et de comparer toutes les parties et construire ma propre hiérarchie?

+0

Vous voulez dire imprimer la hiérarchie? Ou créer une sorte de structure arborescente avec des objets? –

+0

Jep je veux créer une sorte de structure arborescente – Drextor

+0

Doit être capable de le faire en utilisant la classe java.io.File: https://docs.oracle.com/javase/7/docs/api/java/io/File .html –

Répondre

1

Vous pouvez simplement utiliser un Map imbriqué en tant qu'arbre, en mappant des chaînes à d'autres cartes imbriquées. Vous pouvez définir une classe d'aide juste pour obtenir le droit de l'information de type:

class Tree extends HashMap<String, Tree> {} 
Tree tree = new Tree(); 

De cette façon, l'arbre vient déjà avec toutes les fonctionnalités utiles dont il a besoin. Puis, itérer les chemins et leurs segments et utiliser computeIfAbsent pour créer de nouvelles branches comme nécessaire:

List<String> paths = Arrays.asList(
     "/src/main/java/tools/mockfile/generator/data/RecordPart.java", 
     "/src/main/java/tools/mockfile/generator/Analyzer.java", 
     "/src/main/java/tools/mockfile/test/Menu.java"); 

for (String path : paths) { 
    Tree node = tree; 
    for (String segment : path.split("/")) { 
     node = node.computeIfAbsent(segment, s -> new Tree()); 
    } 
} 

Ensuite, le tree ressemble à ceci (mine d'indentation, notez que la racine est une chaîne vide):

{={src={main={java={tools={mockfile={test={Menu.java={}}, 
             generator={data={RecordPart.java={}}, 
               Analyzer.java={}}}}}}}}} 

Alternativement, vous pourriez par exemple mettre null pour les fichiers (feuilles) au lieu d'un autre vide Tree.

+0

merci, fonctionne bien – Drextor

0

Si vous souhaitez créer et manipuler une structure arborescente, la bibliothèque ad hoc est Jgrapht.