目录
字符串高级操作
匿名函数
curry函数
高阶函数
偏函数
字符串高级操作
多行
Interpolation
package com.imooc.scala.course07
object StringApp extends App {
val s = "Hello : PK"
val name = "PK"
println(s + name)
println(s"Hello:$name")
val team = "AC Milan"
println(s"Hello:$name,Welcome to $team")
var b =
"""
|这是一个多行字符串
|hello
|world
|PK
|""".stripMargin
println(b)
}
匿名函数
scala> val m1 =(x:Int)=>x+1
val m1: Int => Int = $Lambda$1001/1727379710@233f52f8
scala> m1(10)
val res0: Int = 11
scala> def add = (x:Int,y:Int)=>{x+y}
def add: (Int, Int) => Int
scala> add(2,3)
val res1: Int = 5
curry函数
package com.imooc.scala.course07
object FunctionApp extends App {
def sum(a: Int, b: Int) = a + b
println(sum(2, 3))
// 将原来接收两个参数的一个函数,转换成2个
def sum2(a: Int)(b: Int) = a + b
println(sum2(2)(3))
}
高阶函数
map、filter、flatmap、foreach、reduce等
package com.imooc.scala.course07
object FunctionApp extends App {
println("----map------")
val l = List(1, 2, 3, 4, 5, 6, 7, 8)
// map:逐个去操作集合中的每个元素
l.map((x: Int) => x + 1) //List(2, 3, 4, 5, 6, 7, 8, 9)
// 简写 省略类型
l.map((x) => x * 2) //List(2, 4, 6, 8, 10, 12, 14, 16)
// 简写 省略括号(前提:只有一个元素才能省略括号)
l.map(x => x * 2) //List(2, 4, 6, 8, 10, 12, 14, 16)
// 简写 _表示每一个元素
l.map(_ * 2) //List(2, 4, 6, 8, 10, 12, 14, 16)
// l.map(_ * 2).foreach(println)// 控制台打印
// 在map(_*2)的基础上在过滤每一个元素>8
// l.map(_ * 2).filter(_ > 8).foreach(println) // 10 12 14 16
// 去List前x个元素
// println(l.take(4)) //List(1, 2, 3, 4)
// println(l.take(2)) //List(1, 2)
// 1+2 3+3 6+4 10+5
l.reduce(_ + _) //36
l.reduceLeft(_ - _) //-34
l.reduceRight(_ - _) //-4
l.fold(0)(_-_)
val f=List(List(1,2),List(3,4),List(5,6))
f.flatten//List(1, 2, 3, 4, 5, 6) 压扁
f.map(_.map(_*2))//List(List(2, 4), List(6, 8), List(10, 12))
f.flatMap(_.map(_*2))//List(2, 4, 6, 8, 10, 12)
val txt=scala.io.Source.fromFile("D:\\scala_test\\src\\com\\imooc\\scala\\course07\\hello.txt").mkString
println(txt)
val texs=List(txt)
// 如何使用Scala来完成wordcount统计
// texs.flatMap(_.split(",")).map(x=>(x,1)).foreach(println)
}
偏函数
package com.imooc.scala.course07
import scala.util.Random
object PartitalFunctionApp extends App {
val names = Array("Akiho Yoshizawa", "YuiHatano", "Aoi Sola")
val name = names(Random.nextInt(names.length))
name match {
case "Akiho Yoshizawa" => println("吉老师")
case "YuiHatano" => println("波老师")
case _ => println("知不知道你们在说什么")
}
// 偏函数:被包在花括号{} 内没有match的一组case语句
// A输入参数类型 B输出参数类型
def sayChinese: PartialFunction[String, String] = {
case "Akiho Yoshizawa" => "吉老师"
case "YuiHatano" => "波老师"
case _ => "知不知道你们在说什么"
}
println(sayChinese("Akiho Yoshizawa"))
}