Files.walkFileTree的并行版本(java或scala)
发布时间:2020-05-24 17:27:38 所属栏目:Java 来源:互联网
导读:有没有人知道 java Files.walkFileTree或类似东西的任何并行等价物?它可以是 Java或Scala库. 我们假设在每个文件上执行回调就足够了. 这段代码不会处理文件系统中的循环 – 你需要一个注册表来表明你曾经去过的地方(例如java.util.concurrent.ConcurrentHash
|
有没有人知道 java Files.walkFileTree或类似东西的任何并行等价物?它可以是 Java或Scala库. 解决方法我们假设在每个文件上执行回调就足够了.这段代码不会处理文件系统中的循环 – 你需要一个注册表来表明你曾经去过的地方(例如java.util.concurrent.ConcurrentHashMap).您可以添加各种改进,例如报告异常而不是静默忽略它们. import java.io.File
import scala.util._
def walk(f: File,callback: File => Unit,pick: File => Boolean = _ => true) {
Try {
val (dirs,fs) = f.listFiles.partition(_.isDirectory)
fs.filter(pick).foreach(callback)
dirs.par.foreach(f => walk(f,callback,pick))
}
}
使用折叠而不是使用foreach来收集文件并不是非常困难,但我将其作为练习留给读者. (ConcurrentLinkedQueue可能足够快,无论如何都要在回调中接受它们,除非你的线程非常慢并且文件系统很棒.) (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
