Scala——yield的用法

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值