Scala 无法映射文件流
我试图映射文件流,但仅计算第一个元素:Scala 无法映射文件流,scala,Scala,我试图映射文件流,但仅计算第一个元素: var fList = Stream(new java.io.File("test1") , new java.io.File("test2")) //> fList : scala.collection.immutable.Stream[java.io.File] = Stream(test1, ?)
var fList = Stream(new java.io.File("test1") , new java.io.File("test2"))
//> fList : scala.collection.immutable.Stream[java.io.File] = Stream(test1, ?)
//|
fList.map(file => {
println(file.getAbsolutePath)
}) //> C:\Eclipse\scala-SDK-3.0.2-vfinal-2.10-win32.win32.x86\eclipse\test1
//| res0: scala.collection.immutable.Stream[Unit] = Stream((), ?)
读取流是一种特殊类型的Iterable/Traversable,其元素在被请求之前不会被评估。流通常构造为函数。既然我在流上使用map,那么是否应该计算流中包含的每个文件并输出其名称
更新:我发现这很有用,是使用Stream的一种替代方法:如果您在寻找println的副作用,请不要映射而是循环
如果你在寻找println的副作用,不要映射而是循环
根据Stream.map文档:
返回将给定函数f应用到的流
此流的每个元素。这将返回一个惰性流,以便
不需要完全实现
因此,使用map不会评估流,而是生成一个新流。根据stream.map文档:
返回将给定函数f应用到的流
此流的每个元素。这将返回一个惰性流,以便
不需要完全实现
因此,使用map不会计算流,而是生成一个新流
scala> var fList = Stream(new java.io.File("foo1") , new java.io.File("foo2"))
fList: scala.collection.immutable.Stream[java.io.File] = Stream(foo1, ?)
scala> fList.foreach(f => println(f.getAbsolutePath))
/tmp/foo1
/tmp/foo2
scala> fList take 2 foreach(f => println(f.getAbsolutePath))
/tmp/foo1
/tmp/foo2