首页 > 解决方案 > 在java中收集arraylist的更快方法

问题描述

我有一个包含许多文件的目录,并希望过滤具有特定名称的文件并将它们保存在fileListArrayList 中,它以这种方式工作,但需要很多时间。有没有办法让它更快?

String processingDir = "C:/Users/Ferid/Desktop/20181024";
String CorrId = "00a3d321-171c-484a-ad7c-74e22ffa3625");
Path dirPath = Paths.get(processingDir);       

ArrayList<Path> fileList;

try (Stream<Path> paths = Files.walk(dirPath))
{           
    fileList = paths.filter(t -> (t.getFileName().toString().indexOf("EPX_" + 
    corrId + "_") >= 0)).collect(Collectors.toCollection(ArrayList::new));
}

在尝试条件下浏览目录不需要太多时间,但收集它fileList需要很多时间,而且我不知道它到底是哪个操作具有这种糟糕的性能或需要改进哪些操作。(这当然不是完整的代码,只是相关的东西)

标签: javalistjava-8stream

解决方案


来自java.nio.file.Files.walk(Path)api:

通过遍历以给定起始文件为根的文件树,返回一个用 Path惰性填充的 Stream 。

这就是为什么它给你的印象是“在 try 条件下遍历目录并没有花费太多时间”。

实际上,真正的交易大多是在做的collect,它不是collect的机制故障,因为它很慢。


推荐阅读