我的代码是这样开始的:
val paths: Array[Path] = ...
val filePaths: Array[java.util.stream.Stream[Path]] = paths.map(Files.walk(_))
我希望获得' filePaths'有类型Array [Path]。 (任何Scala集合都可以正常工作)。但是从这一点来看,任何进一步的进展都没有到达我。我尝试过各种JavaConversions,flatMap,reduce,collect和java.util.stream.Stream#toArray的组合,总是会导致一些模糊的类型错误。
此外,不仅要看到一个解决方案,还要了解为什么这看起来比它应该更加困难。例如,为什么没有
import scala.collection.JavaConversions._
...
paths.flatMap(Files.walk(_))
//or
paths.flatMap(Files.walk(_).collect(Collectors.toList))
工作? (IDE错误为:"已检测到:(路径)=> GenTraversableOnce [NotInferedB],实际:(路径)=>任何")
答案 0 :(得分:1)
import scala.collection.JavaConverters._
paths.flatMap(Files.walk(_).collect(Collectors.toList[Path]).asScala)
你走在正确的道路上,toList
只需要一个类型。
请注意,您应该更喜欢JavaConverters
到JavaConversions
,因为它更易读。
如果您使用-Xexperimental,您也可以使用java api
Arrays.stream(paths).flatMap(Files.walk(_)).collect(Collectors.toList[Path]).asScala