<@U0GBVCELB>: Here's a port of your Scala: ``` da...
# announcements
a
@eric.kolotyluk: Here's a port of your Scala:
Copy code
data class TraversePaths(val roots: List<Path>, val traverseDirectoriesDown: Boolean = false, val traverseDirectoriesUp: Boolean = false, val traverseFiles: Boolean = true, val traverseLinks: Boolean = true, val traverseFailures: Boolean = false) {

    fun <U> forEach(f: (Path) -> U) {
        val visitor = object : SimpleFileVisitor<Path>() {

            override fun preVisitDirectory(path: Path, attrs: BasicFileAttributes): FileVisitResult {
                if (traverseDirectoriesDown) f(path)
                return CONTINUE
            }

            override fun postVisitDirectory(path: Path, e: IOException?): FileVisitResult {
                if (traverseDirectoriesUp) f(path)
                return CONTINUE
            }

            override fun visitFileFailed(path: Path, e: IOException?): FileVisitResult {
                if (traverseFailures) f(path)
                return CONTINUE
            }

            override fun visitFile(path: Path, attrs: BasicFileAttributes): FileVisitResult {
                if (traverseFiles) f(path)
                return CONTINUE
            }
        }

        if (traverseLinks)
            roots.forEach { Files.walkFileTree(it, EnumSet.of(FileVisitOption.FOLLOW_LINKS), Integer.MAX_VALUE, visitor) }
        else
            roots.forEach { Files.walkFileTree(it, visitor) }
    }
}

fun main(args: Array<String>) {
    TraversePaths(listOf(Paths.get("/"))).forEach { file ->
        println(file)
    }
}