大家好,欢迎来到IT知识分享网。
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
———————
作者:Free World
来源:CSDN
原文:https://blog.csdn.net/jiangshouzhuang/article/details/48751143
版权声明:本文为博主原创文章,转载请附上博文链接!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/13002.html