scala笔记-函数
程序员文章站
2022-05-02 22:00:29
...
知识点:函数,匿名函数,高阶函数,偏函数
测试代码:
package demo.scala object FuncTest { def main(args: Array[String]): Unit = { // //1.try-catch // try { // 1 / 0 // } catch { // case e: ArithmeticException => println("除数不能是0") // case e: Exception => println(e.getMessage) // } finally { // //TODO // println("finally ...") // } // //2.case class在模式匹配中的应用 // testMatch(Student("li")) // //把方法赋值给变量,两种写法 // val sayHelloObj = sayHello _ // val sayHelloObjet1 = sayHello(_) // sayHelloObj("hello") // //匿名函数可以赋给变量 // var obj = (name: String) => { // println(name) // } // obj("hello") //3.高阶函数map,对集合中的每个元素做同样的操作 var list = List(1, 2, 3) //map里是个匿名函数 y = f(x)形式 println(list.map((x: Int) => x * 2)) //参数类型推断,省略掉类型 println(list.map((x) => x * 2)) //匿名函数如果只有一个参数,可以省略掉括号 println(list.map(x => x * 2)) //占位符_代表list里的每一个元素(推荐写法) println(list.map(_ * 2)) //4.filter过滤 println(list.filter(_ > 2)) //5.take取值 println(list.take(2)) //6.reduce对元素x和元素y进行处理,使用方法x+y,以此类推(从左往右连续的做+操作,即求list中的所有元素的和) list.reduce((x, y) => x + y) list.reduce(_ + _) //打印中间过程 list.reduce((x, y) => { println(x + "," + y) x + y }) //7.max,min,sum,count println(list.min) println(list.max) println(list.sum) println(list.count(_ >= list.min)) //8.flatten 平铺 var list2 = List(List(1, 2), List(3, 4)) println(list2.flatten) //9.flatMap 扁平化 println(list2.flatMap(_.map(_ * 2))) //结果:List(2, 4, 6, 8) println(list2.map(_.map(_ * 2))) //结果:List(List(2, 4), List(6, 8)) //偏函数 println(getScore("zhangsan")) } //普通写法 def add1(x: Int, y: Int) = { x + y } //匿名函数赋给一个新的函数 def add2 = (x: Int, y: Int) => { x + y } def sayHello(mess: String): Unit = { println(mess) } class Person //case class不用new,可以直接用,spark sql中用的非常多 case class Teacher(name: String) extends Person case class Student(name: String) extends Person def testMatch(person: Person): Unit = { //case class在模式匹配中的是使用 person match { case Teacher("wang") => println("this is teacher") case Student("lisi") => println("student lisi") case Student(name) => println("this is student") case _ => println("other") } } //偏函数(被包含在花括号里的一组没有match的case语句就是偏函数) def getScore: PartialFunction[String, Int] = { case "math" => 95 case "english" => 98 case _ => 60 } }
上一篇: PHP下传文件大小修改