最終目標が何であるかによって大きく異なると思います。データを印刷するだけの場合、またはデータを処理する必要がある場合、またはアルゴリズムを操作する必要がある場合。
私の直感は、すべてLinkedHashMap
を使って行い、基本的に地図の地図などにしています.2つの異なる可能な値があるので、これをきちんとやることはできますあなたのマップのためのフォルダとファイル。 LinkedHashMapを使用すると、データを挿入するときにデータの順序を維持することに注意してください。並べ替え、またはランダムな順序が必要な場合は、他の実装を選択できます。
基本的に、私は木(あなたにも再帰的にこれを行うことができます)を構築次に
public interface DirectoryEntry{
boolean isFile;
boolean isFolder;
}
public class Folder implements DirectoryEntry{
public boolean isFile(){ return false;}
public boolean isFolder(){ return true;}
private Map<String, DirectoryEntry> entries = new LinkedHashMap<String, DriectoyrEntry>();
public Map<String, DirectoryEntry>getEntries(){ return entries;}
public void addFile(String filename){ entries.put(filename, new File();}
public void addFolder(String foldername){entries.put(foldername, new Folder();}
}
public class File implements DirectoryEntry{
public boolean isFile(){ return true;}
public boolean isFolder(){ return false;}
}
次(擬似コード)のようなものとして、それを参照してくださいになります。そして、あなたを
Map<String, DirectoryEntry> entries = new LinkedHashMap<String, DirectoryEntry>()
while(!end of list){
Map entry = entries;
1. Split string on '/'
2. foreach(token){
if file
entries.put(token, new File());
else{
if(!entry.containsKey(token))
entry.put(token, new Folder);
// use the folder map for any sub-folders/files
entry = ((Folder)entry.get(token)).getEntries();
}
}
}
をあなたの最終的なリストをスキャンし、好きなようにそれを再生することができます。 File and Folderを意図的に作成しましたが、必要に応じて追加のメタデータ/情報を追加できます。
これは、ファイル/フォルダを解析/マッピングする方法についてのアイデアを提供するための単なる選択肢に過ぎませんが、そのまま機能的な解決策を意味するものではありません。
私が言ったように、まず解析して印刷する方が簡単なのかどうかは、最終的なデータセットで達成したいことに依存します。しかし、私の腸の本能は、それをすべて解析し、あなたが見せているものがあなたが理解しているものであり、操作することを保証するためにあなたが解析したものを表示することでしょう。
文字列のリストをツリーデータ構造に変換しようとしているか、文字列のリストのツリー表現を出力しようとしていますか? – ggreiner
@ggreiner私はそれをツリー表現として表示しようとしています。 – dee