如何将程序的输出转换为Hashmap?

时间:2016-02-17 07:09:23

标签: java hashmap

我的代码是这样的:

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();
    }
}

现在,有没有办法将结果集放入散列图?

1 个答案:

答案 0 :(得分: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));