Scala中的yield用法
来源:互联网 发布:windows监控文件变化 编辑:程序博客网 时间:2024/06/06 17:22
Scala中的yield的主要作用是记住每次迭代中的有关值,并逐一存入到一个数组中。
用法如下:
for {子句} yield {变量或表达式}
具体举例如下,该例子获取文本文件中包含指定关键字的相关行,并统计各相关行字数,先把文本文件内容贴出来:
I love Scala.
I love Spark.
I love Hadoop.
下面是程序代码:
object YieldDemo {
lazy val files = (new java.io.File("D:\\Scala_Projects\\ScalaInAction\\src\\com\\zhangyun\\scala\\hello")).listFiles
// 输出指定目录下的所有文件
/*for(file <- files)
{
println(file)
}*/
def fileLines(file: java.io.File) = {
Source.fromFile(file).getLines.toList
}
def main(args: Array[String]): Unit = {
val lengths =
for {
// 获取以.txt结尾的文件
file <- files if file.getName.endsWith(".txt")
line <- fileLines(file)
trimmedLine = line.trim
if trimmedLine.matches(".*love.*")
} yield line + ":合计" + trimmedLine.length + "个字。"
lengths.foreach(println)
}
}
先来看看输出:
I love Scala.:合计13个字。
I love Spark.:合计13个字。
I love Hadoop.:合计14个字。
注意点:
yield最终会将每次迭代的line + ":合计" + trimmedLine.length + "个字。"结果存放到一个数组中.
在这里是一条表达式,如果你用 trimmedLine.length 替代这条语句,则将每次迭代的trimmedLine.length值存放到数组中。
如果将yield改为:
} yield {
println(line)
trimmedLine.length
}
则在每次迭代中会打印各相关行内容。各相关行字数会存入到数组中,并通过程序最后一条代码lineLengths.foreach(println)打印出来。
要记住,要将结果存放到数组的变量或表达式必须放在yield{}里最后位置。结果如下:
I love Scala.
I love Spark.
I love Hadoop.
13
13
14
- Scala中的yield用法
- Scala中的for/yield详解
- Python中的yield用法
- scala for循环 yield 用法 自我理解
- yield在python中的用法
- python中的yield关键词用法总结
- Scala 的 yield
- Scala yield unit 测试
- Scala细节-yield格式
- Scala yield 关键字
- yield用法
- scala中yield关键字讲解
- scala中yield的使用
- Python yield 用法
- Python yield 用法
- yield 用法说明
- python yield用法
- Python yield 用法
- CGContextAddArcToPoint
- 主动与被动的找现在不是最需要的书,但有价值的书
- 时间类
- JSON数据解析
- 进程
- Scala中的yield用法
- Redis数据类型和抽象
- 链路层
- 第一行代码笔记4(UI)
- 聊天工具
- pointer on C_2 基本数据类型 指针 const
- 协议栈
- 大整数模版
- seci-log 1.13 发布 简化了安装和程序底层结构做了调整