2016-02-17 18 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

感谢您的帮助,但我需要的仅仅是哈希映射,以便我可以比较任何重复的条目。 –