4

递归删除scala文件中的错误语法问题

Files.walk(path, FileVisitOption.FOLLOW_LINKS)
    .sorted(Comparator.reverseOrder())
    .forEach(Files.deleteIfExists)
4

2 回答 2

8

问题是您试图将 scala 样式的函数传递给需要 java-8 样式函数的方法。有几个库可以进行转换,或者您可以自己编写(并不复杂),或者可能最简单的方法是将 java 集合转换为 scala 集合,该集合具有foreach期望 scala 样式函数的方法一个论点:

import scala.collection.JavaConverters._

Files.walk(path, FileVisitOption.FOLLOW_LINKS)
        .sorted(Comparator.reverseOrder())
        .iterator().asScala
        .foreach(Files.deleteIfExists)
于 2017-06-20T21:26:03.137 回答
0

在 Scala 2.12 中,我希望这应该可以工作:

...forEach(Files.deleteIfExists(_: Path))

您需要指定参数类型的原因是因为预期类型是Consumer[_ >: Path],而不是Consumer[Path]Scala 中的类型。

如果它不起作用(目前无法测试),请尝试

val deleteIfExists: Consumer[Path] = Files.deleteIfExists(_)

...forEach(deleteIfExists)

在 Scala 2.12 之前,Joe K 的答案是正确的。

于 2017-06-21T08:11:36.437 回答