語法錯誤問題,遞歸刪除文件階的forEach Scala中顯示預期:消費[_>:路徑]實際:(路徑)=>布爾
Files.walk(path, FileVisitOption.FOLLOW_LINKS)
.sorted(Comparator.reverseOrder())
.forEach(Files.deleteIfExists)
語法錯誤問題,遞歸刪除文件階的forEach Scala中顯示預期:消費[_>:路徑]實際:(路徑)=>布爾
Files.walk(path, FileVisitOption.FOLLOW_LINKS)
.sorted(Comparator.reverseOrder())
.forEach(Files.deleteIfExists)
的問題是,你想傳遞scala風格的函數轉換爲期望java-8風格函數的方法。有一些庫可以完成轉換,或者你可以自己編寫它(這並不複雜),或者最簡單的方法就是將java集合轉換爲一個scala集合,該集合有一個期望scala樣式函數的方法foreach
作爲參數:
import scala.collection.JavaConverters._
Files.walk(path, FileVisitOption.FOLLOW_LINKS)
.sorted(Comparator.reverseOrder())
.iterator().asScala
.foreach(Files.deleteIfExists)
在斯卡拉2.12我期望這應該工作:
...forEach(Files.deleteIfExists(_: Path))
你需要指定參數類型是因爲預期類型Consumer[_ >: Path]
,不Consumer[Path]
因爲它會在斯卡拉的原因。
如果它不工作(不能在此刻測試),嘗試
val deleteIfExists: Consumer[Path] = Files.deleteIfExists(_)
...forEach(deleteIfExists)
斯卡拉2.12之前,喬·K公司的答案是正確的。