java - 在java中收集arraylist的更快方法
问题描述
我有一个包含许多文件的目录,并希望过滤具有特定名称的文件并将它们保存在fileList
ArrayList 中,它以这种方式工作,但需要很多时间。有没有办法让它更快?
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
需要很多时间,而且我不知道它到底是哪个操作具有这种糟糕的性能或需要改进哪些操作。(这当然不是完整的代码,只是相关的东西)
解决方案
来自java.nio.file.Files.walk(Path)
api:
通过遍历以给定起始文件为根的文件树,返回一个用 Path惰性填充的 Stream 。
这就是为什么它给你的印象是“在 try 条件下遍历目录并没有花费太多时间”。
实际上,真正的交易大多是在做的collect
,它不是collect的机制故障,因为它很慢。
推荐阅读
- php - AJAX 调用后数据不会刷新
- c# - .NET 中的任何 WinINet 和 WinHTTP 实现?
- c# - 它可以做得更干净更短吗?
- c# - 根据关键字获取列表元素的值
- typescript - 从 TypeScript 中的对象属性继承通用值
- angular - 如何在 Angular 7 中订阅本地存储
- c# - C# async/await 读取 DbDataReader 的效率(或滥用)
- python - 当我只传递没有 x、y 数据参数的整个数据帧时,箱形图显示什么结果?
- php - 我想将month()函数返回值为'jan',feb等
- python - numpy.hstack() 不能在 jitter 函数中工作