2016-02-17 27 views
1

我一直認爲是這樣的代碼:如何將程序的輸出轉化爲散列圖?

public static void displayDirectoryContents(File dir) { 
    try { 
     File[] files = dir.listFiles(); 
     for (File file : files) { 
      if (file.isDirectory() && !file.getName().endsWith(".svn")) { 
       System.out.println("directory:" + file.getCanonicalPath()); 
       displayDirectoryContents(file); 
      } else { 
       System.out.println("file:" + file.getCanonicalPath()); 
      } 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

現在,有沒有把結果集到一個HashMap的方法嗎?

+1

併發的地圖是什麼將是關鍵,值對嗎?目前還不清楚你在問什麼。 – Maroun

+0

你的問題不清楚。如果要將某些鍵與某些值相關聯,則使用散列映射。如果您擁有的是文件路徑列表,則不具有鍵/值對。告訴我們你想要完成的事情(不僅僅是「把文件路徑放到散列表中」)。 –

+0

我的鍵和值是相同的,即上述書面代碼的結果。此代碼給出了存儲在特定文件夾內的文件及其文件路徑(我只在此處發佈了部分代碼)。所以無論輸出什麼,它都必須存儲在一個hashmap中,key和values是相同的。 –

回答

0

你有很多對象的嵌套,所以hashmap可能不是很好的數據結構。我建議推出自定義POJO和樹狀結構:

class Node { String canonicalPath; String type; Node parent; List<Node> children = new ArrayList<>(); } 

而且修改代碼:

public List<Node> displayDirectoryContents(File dir, Node parent) { 

List<Node> result = new ArrayList<Node>(); 
try { 
    File[] files = dir.listFiles(); 
    for (File file : files) { 
     if (file.isDirectory() && !file.getName().endsWith(".svn")) { 
      Node directory = new Node(file.getCanonicalPath(), "directory", parent); 
      directory.setChildren(displayDirectoryContents(file, directory); 
      result.add(directory); 
     } else { 
      result.add(new Node(file.getCanonicalPath(), "file", parent); 
     } 
    } 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
return result; 
} 

類似的東西 - 而且比你的加工修改。

,或者如果你需要它的名字的文件列表:

可以引入Map<String, Object>,並作爲Object你可以把任何String(文件),或Map<String, Object>的文件夾,並進行遞歸。

或只需製作一個List文件,並遞歸填充它。純文件路徑,像

List<String> displayDirectoryContents(File dir) { 
    List<String> res = new ArrayList(); 
    File[] files = dir.listFiles(); 
    for (File file : files) { 
     if (file.isDirectory() && !file.getName().endsWith(".svn")) { 
      res.add("directory:" + file.getCanonicalPath()); 
      res.addAll(displayDirectoryContents(file)); 
     } else { 
      res.add("file:" + file.getCanonicalPath()); 
     } 
    } 
    return res; 
} 

比你可以:

displayDirectoryContents("/dummypath").forEach(System.out.println);

會給你同樣的結果。

或者串串

Map<String, String> res = displayDirectoryContents("/dummypath").stream().collect(Collectors.toConcurrentMap(o -> o, o -> o));

+0

感謝您的幫助,但我需要的僅僅是哈希映射,以便我可以比較任何重複的條目。 –