Scala高阶函数

本文深入探讨了Scala编程中的高阶函数,包括`sayHi`、`work`、`highLevel`等示例,并详细解析了`filter`、`map`、`flatMap`、`reduce`、`dropWhile`、`sortWith`和`groupBy`等集合操作。通过实例展示了如何使用这些函数进行数据处理和集合转换,同时提到了闭包和柯里化的概念。
摘要由CSDN通过智能技术生成

常见高阶函数

def main(args: Array[String]): Unit = {
    //list集合
      //空值list
  //  val list = Nil
    //因为list是一个抽象类,所以无法创建对象,需要借助伴生类实现
   // val list1=List[Int](1,1,2,3,4,5,6)
  //  println(list.isEmpty)
   // println(list1.isEmpty)
    //首元素
    //val first =list1.head
    //首元素之后的所有数
    //val tail = list1.tail
   // println(first)
   // println(tail)
    //练习:使用递归事项list的求和
    //def recursiveList(list: List[Int]): Int = {
    //    if (list.isEmpty)
    //      0
    //    else
    //    //将第一个元素后面的所有数递归拆除相加
    //      list.head + recursiveList(list.tail)
//
    //  }




 // println(test)
 //  test
 // funcOps2("匿名函数")
   // highLevel()
    //typeUse()
highEasy()

  }
  def test: Unit = {
    def a(name: String): Unit = {
      println("this is my one " + name)
    }

    val b = a _

    def c = a _

    b("变量")
    a("函数")
    c("函数")
    println(b)
    println(c)

  }
  def funcOps2(name:String): Unit ={
    val a = (name:String) =>{
      println("这个函数是"+name)
    }
    a(name)
  }
  //高阶函数
  def highLevel(): Unit ={
    def sayHi(name:String,work:(String) => Unit):Unit={
       work(name)
    }
    //函数一
    sayHi("刘诗诗",(name:String)=>{
      println("say hi to"+name)
    })
    //高阶函数,一二函数为基础
    sayHi("李师师",name => work(name,"打架"))
  }
  //h函数二
  def  work(str: String,a:String):Unit={
  println(str.reverse+"过来"+a)
  }
  //参数类型推断
  def typeUse(): Unit ={
    //定义一个匿名函数
    val money = (x:Double) => 100*x
    //应用
    println(money(10:Double))
    //简化:根据类型推断机制省却类型标注
    println(money(10))
    println("-----------------------------")
    //list集合推断
    val list = Array(1,2,3,4,5)
    //定义list集合的函数
    list.foreach((x:Int)=>println(x+"\t"))
    println("--------------------------")
    //list集合简写:省略类型
    list.foreach((x)=>println(x+"\t"))
    println("-------------------")
    //list一个参数简写
    list.foreach(x => println(x+"\t"))
    println("---------------")
    //通配符简写
    list.foreach(println(_))
    //最简写
    list.foreach(println)
  }
  def highEasy(): Unit ={
    //filter:作用过滤 特点:是一个新集合 判断:ture/false
    val list = List[Int](1,2,3,4,5,6)
    // var newlist = list.filter((num:Int) => num%2==0)
   // list.filter((num)=> num%2 == 0)
   // list.filter(num => num% 2 ==0)
   // list.filter(_ % 2 == 0)
   // println("这是filter"+newlist)


    //map:对元素进行运算 特点:一对一操作的mapping映射
    val newList= list.map((num: Int) => num * 5)
    //简化
    list.map((num) => num*5)
    list.map(num => num*5)
    list.map(_*5)
    println(newList)
    println("---------------------------")
    //flatmap:拆分元素 特点:一对多
    val arr = Array("hello you", "hello me", "hello shit")
    val word = arr.flatMap((arr:String) => arr.split(" "))
    println(word.mkString("[",",","]"))
     println("--------------")
    //reduce聚合操作 累加演示
    var arr1 = 1 to 10
   println( arr1.reduce((a1:Int,a2:Int) =>{
     println("a1: "+a1+" a2: "+a2)
     a1+a2}))
    println("-------------------------")
    //dropWhile :删除满足条件的元素,直达遇到不满足为止
    val list3= Array[Int](1,2,3,4,5,6,7)
    //循环删除其中的偶数
    val newlist=list3.dropWhile((num:Int)=>num != 6)
    newlist.foreach(println)
     println("-----------------------------------")
    //sortWith:排序 返回值:boulean
    val lists = Array(3,-6,2,7,8,0,12)
    lists.sortWith((x:Int,y:Int) => x>y).foreach(println)//降序
    lists.sortWith((x:Int,y:Int) => x< y ).foreach(println)//升序
    println("------------------------")
    //groupBy:分组  返回值是:map类型
    val arrayg = Array("hello you", "hello me", "hello shit")
    val words = arrayg.flatMap((a:String) => a.split(" "))
    println(words.groupBy(b => b).foreach(t => println(t._1+t._2)))
    println("-------------------------")
    words.groupBy(b => b).foreach(t => println(t._1 + t._2.mkString("[",",","]")))
    println("-------------------------")
    words.groupBy(c => c).foreach(t => println(t._1 + t._2.size))
    //partition分区
    val listPainter = Array(3,-6,-9,2,8,4,1,0,8)
    val tuple = listPainter.partition((a: Int) => a < 5)
   // val (left, right) = list.partition((num:Int) => num < 4)
   //println(left.mkString("[", ", ", "]"))
   // println(right.mkString("[", ", ", "]"))
    println(tuple._2.mkString("[", ", ", "]"))
    println(tuple._1.mkString("[", ", ", "]"))
  }

闭包和柯里化

1 闭包:是变量作用域在不同函数中无法调用的问题
2柯里化:是正好他的代码写法,可以解决闭包的问题
3代码的逻辑:是将一个两个参数的函数,转化成两个各有一个参数的函数,第一个函数返回第二个函数,第二个函数返回结果。(类似套娃,不过传递的不是结果而是参数)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值