第85讲:Scala中For表达式 实现高阶函数的效果

下面的例子,是打印 母子的姓名

样本类

case class Person(name: String, isMale: Boolean, children: Person*)

用高级函数实现

  def main(args: Array[String]) {

    val lauren = Person("Lauren", true)
    val rocky = Person("rocky", false)
    val vivian = Person("vivian", false, lauren, rocky)
    val persons = List(lauren, rocky, vivian)

    //println(for_deal(persons))
    println(function_deal(persons))
  }

  def function_deal(persons: List[Person]): List[(String, String)] = {
    println("for_deal run")
    val currntTime = System.currentTimeMillis()
    val list = persons filter (person => !person.isMale) flatMap (person => (person.children
      map (child => (person.name, child.name))))
    println("used time=" + (System.currentTimeMillis() - currntTime))
    list
  }

运行结果
used time=117
List((vivian,Lauren), (vivian,rocky))

用for 表达式

代码如下

 def main(args: Array[String]) {

    val lauren = Person("Lauren", true)
    val rocky = Person("rocky", false)
    val vivian = Person("vivian", false, lauren, rocky)
    val persons = List(lauren, rocky, vivian)

    println(for_deal(persons))
    //println(function_deal(persons))
  }

  def for_deal(persons: List[Person]): List[(String, String)] = {
    println("for_deal run")
    val currntTime = System.currentTimeMillis()
    val result = for (person <- persons; if !person.isMale; child <- person.children) yield (person.name, child.name)

    println("used time=" + (System.currentTimeMillis() - currntTime))
    result
  }

运行结果:
for_deal run
used time=105
List((vivian,Lauren), (vivian,rocky))

从上面运行结果看,for 表达式代码简洁,效率也不低

参考资料:

百度网盘:http://pan.baidu.com/share/home?uk=4013289088#category/type=0
微信号:18610086859
DT大数据微信公众账号:DT_Spark
DT大数据梦工厂交流群:① 462923555 ②418110145 ③437123764

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值