Scala中for推导式与容器类型的深度解析
1. Stream的特性与应用
在处理文件时,Stream是一种很有用的数据结构。Stream的 toString 方法会计算流的头部(即文件中的注释行),对于未计算的尾部则显示问号。我们可以获取头部,然后取出前五行,这会强制对这些行进行计算。
Stream适用于处理非常大的文件,因为将整个未过滤的内容存储在内存中可能会消耗过多的内存。不过,如果我们真的读取了整个大数据集,它仍然会全部存储在内存中,因为Stream会记住它计算过的所有元素。需要注意的是,for推导式的每次迭代都是无状态的,所以我们一次只需要在内存中保留一行。
实际上,当你对 scala.collection.Iterator 调用 toSeq 时, scala.collection.TraversableOnce 子类型的默认实现会返回一个Stream。其他继承自 Iterator 的类型可能会返回严格集合。
2. for推导式的底层原理
for推导式语法实际上是编译器提供的语法糖,用于调用集合方法 foreach 、 map 、 flatMap 和 withFilter 。对于非平凡序列,for推导式比使用相应API调用的复杂表达式更易于读写。
withFilter 方法用于过滤元素,类似于之前看到的
超级会员免费看
订阅专栏 解锁全文
77

被折叠的 条评论
为什么被折叠?



