Scala高阶函数及模型匹配

本文深入探讨Scala中的高阶函数应用,包括map、filter、reduce等,通过实例讲解如何利用这些函数处理列表数据,同时介绍了flatMap的使用及wordCount实现方法。此外,还解析了Tuple的特性和多行字符串的创建方式。

1.高阶函数介绍:
map:

    val list=List(1,2,3,4,5,6,7,8,9)
    println(list.map((x:Int)=>x*2))
    //自动推断int类型
    println(list.map((x)=>x*2))
    //一个参数,可去括号
    println(list.map(x=>x*2))
    //一个参数,简略写法
    println(list.map(_*2))


filter and take:

    //根据条件过滤数据
    println(list.map(_ * 2).filter(_>2))
    //只查看前3个数据
    println(list.take(3))

 
reduce:

    println(list.reduce(_-_))
    println(list.reduceLeft(_-_))
    //Right的结果不一样,为什么
    println(list.reduceRight(_-_))

  
学会借助代码理解函数的原理:

    //让reduceRight打印它的计算流程
    list.reduceRight((a,b)=>{
      println(a+" "+b)
      a+b
    })

  一目了然 
 
zip:类似于inner join

    val list1=List(1,2,3)
    val list2=List("a","b","c")
    println(list1.zip(list2))

 

    //当list1和list2个数不匹配时
    val list1=List(1,2,3,4)
    val list2=List("a","b","c")
    println(list1.zip(list2))

 
flatten and foreach:

    val list1=List(List(1,2),List(3,4),List(5,6))
    //打印出其中的所有内容
    println(list1)
    //依次查看其中的每个元素
    list1.foreach(println)
    //查看打扁数据
    println(list1.flatten)

 
flatMap:

    val list1=List(List(1,2),List(3,4),List(5,6))
    //flatMap后是已经打扁了的数据
    println(list1.flatMap(x=>x))
    //嵌套个map
    println(list1.flatMap(_.map(_*2)))

 

举个例子,wordCount:

lines.flatMap(_.split(" "))  ==> 拆分成一个个单词
    .map(x => (x, 1))    ==> 给每个单词捆绑个值
    .reduceByKey(_ + _)按key分组,然后把值两两相加

Tuple :tuple是一个集合,里面可以放各种各样类型的元素

    val tupletest=(1,2.0,"c")
    //打印tupletest的所有数据
    println(tupletest)
    //取tupletest里的某个值
    println(tupletest._1,tupletest._2,tupletest._3)

 
多行字符串:

    val a=
      """
        |你好
        |我不好
      """.stripMargin

另一种输出方法(常用):

    val a="Lynn"
    println(s"Hello: $a")
    //执行结果:
    //Hello: Lynn

2.模型匹配:
变量 match {
    case 值 => 代码
    case 值 => 代码
    case _  => 代码 //其他情况就执行这段代码
}

偏函数 PartialFunction
被包在花括号内没有match的一组case语句

PartialFunction[A, B]
A:代表入参类型
B:代表返回类型

举个例子:

    def SayChineseName:PartialFunction[String,String]={
      case "烙痕" =>"Lynn"
      case "老师" =>"Teacher"
      case "学生" =>"Student"
    }
    println(SayChineseName("烙痕"))

    //执行结果:
    //Lynn

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值