2017-06-20 41 views

回答

3

的問題是,你想傳遞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) 
0

在斯卡拉2.12我期望這應該工作:

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

你需要指定參數類型是因爲預期類型Consumer[_ >: Path],不Consumer[Path]因爲它會在斯卡拉的原因。

如果它不工作(不能在此刻測試),嘗試

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

...forEach(deleteIfExists) 

斯卡拉2.12之前,喬·K公司的答案是正確的。