scala 中的 forEach 显示 expected: Consumer[_ >:Path] actual: (Path) => Boolean
forEach in scala shows expected: Consumer[_ >:Path] actual: (Path) => Boolean
递归删除scala文件的语法错误问题
Files.walk(path, FileVisitOption.FOLLOW_LINKS)
.sorted(Comparator.reverseOrder())
.forEach(Files.deleteIfExists)
问题是您试图将 scala 风格的函数传递给需要 java-8 风格函数的方法。有几个库可以进行转换,或者您可以自己编写(并不复杂),或者最简单的可能是将 java 集合转换为具有 [=11= 的 Scala 集合] 方法需要一个 scala 风格的函数作为参数:
import scala.collection.JavaConverters._
Files.walk(path, FileVisitOption.FOLLOW_LINKS)
.sorted(Comparator.reverseOrder())
.iterator().asScala
.foreach(Files.deleteIfExists)
在 Scala 2.12 中,我希望这应该可以工作:
...forEach(Files.deleteIfExists(_: Path))
您需要指定参数类型的原因是因为预期类型是 Consumer[_ >: Path]
,而不是 Scala 中的 Consumer[Path]
。
如果不行(暂时无法测试),试试
val deleteIfExists: Consumer[Path] = Files.deleteIfExists(_)
...forEach(deleteIfExists)
在 Scala 2.12 之前,Joe K 的答案是正确的。
递归删除scala文件的语法错误问题
Files.walk(path, FileVisitOption.FOLLOW_LINKS)
.sorted(Comparator.reverseOrder())
.forEach(Files.deleteIfExists)
问题是您试图将 scala 风格的函数传递给需要 java-8 风格函数的方法。有几个库可以进行转换,或者您可以自己编写(并不复杂),或者最简单的可能是将 java 集合转换为具有 [=11= 的 Scala 集合] 方法需要一个 scala 风格的函数作为参数:
import scala.collection.JavaConverters._
Files.walk(path, FileVisitOption.FOLLOW_LINKS)
.sorted(Comparator.reverseOrder())
.iterator().asScala
.foreach(Files.deleteIfExists)
在 Scala 2.12 中,我希望这应该可以工作:
...forEach(Files.deleteIfExists(_: Path))
您需要指定参数类型的原因是因为预期类型是 Consumer[_ >: Path]
,而不是 Scala 中的 Consumer[Path]
。
如果不行(暂时无法测试),试试
val deleteIfExists: Consumer[Path] = Files.deleteIfExists(_)
...forEach(deleteIfExists)
在 Scala 2.12 之前,Joe K 的答案是正确的。