1、字符串高级操作
多行
val b =
"""
|这是一个多行字符串
|hello
|world
""".stripMargin
Interpolation(插值)
val name = "Messi"
println(s"Hello:$name")
val team = "AC"
println(s"hello:$name, Welcome to $team")
2、匿名函数
//函数是可以命名的,也可以不命名
//(参数名:参数类型...) => 函数体 val m1 = (x:Int)=>x+1 m1(10) 结果为11
object FunctionApp extends App{
def sayHello(name:String):Unit={
println("hi:"+name)
}
sayHello("messi")
}
def add =(x:Int,y:Int)=>{x+y}
//(x:Int,y:Int)为匿名函数
add(2,3)
3、curry函数
//将接收两个参数的一个函数,转换成2个
def sum(a:Int, b:Int) = a+b
println(sum(1,2))
def sum2(a:Int)(b:Int) = a+b
println(sum2(2)(3))
4、高阶函数
map,filter,flatmap,foreach,reduce等
val l = List(1,2,3,4,5,6,7,8)
//map:逐个去操作集合中的每个元素
l.map((x:Int) => x+1) //(x:Int)相当于入参,x+1为作用在每个元素上的函数
简:l.map(x => x+1) //x只有一个元素,才可以省括号,不然就得l.map((x,y) => x+1);;Int因为可以自动导出,所以可以省略
l.map(_*2)
l.map(_*2).foreach(println)
l.map(_*2).filter(_>8).foreach(println)
l.take(4) //取前4个元素
l.reduce(_+_) //两两相加 1+2 3+3 6+4 10+5 ....
l.reduce(_-_) //-34
l.reduceLeft(_-_) //-34 (((((((1-2)-3)-4)-5)-6)-7)-8)
l.reduceRight(_-_) //-4 (1-(2-(3-(4-(5-(6-(7-8)))))))
l.fold(0)(_-_) //Int = -36
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("/Users/terry/hello.txt").mkString
println(txt)
val l = List(txt)
l.flatMap(_.split(",")).map(x=>(x,1)).foreach(println)
l.flatMap(_.split(",")).map(x=>(x,1)).reduce(_+_)
//链式编程
5、偏函数
//A 输入参数类型 B 输出参数类型
def sayChinese:PartialFunction[String,String]={
case "Akiho Yoshizawa" => "季老师"
case "YiHatnao" => "波老师"
case _ => "真不知道你们在说什么"
}
println(sayChinese("Akiho Yoshizawa"))
//偏函数,被包在花括号内没有match的一组case语句