字符串的高级操作
插值和多行操作
package com.yy.scala
object StringApp extends App{
//插值 字符串连接
val a = "world"
println(s"Hello $a")
//多行操作 Shift+" 按三次 Enter
val b =
"""
|Hello
|world
|come on
|""".stripMargin
println(b)
}
-------------------------------------
输出样式如下
Hello world
Hello
world
come on
匿名函数
没有名称的函数称为匿名函数
(参数名: 参数类型) => 函数体
package com.yy.scala
object AnonymousFunctionApp extends App {
//有名称的函数
def sayHello(name:String): Unit = {
println("Hello " + name)
}
sayHello("world")
//匿名函数 传给一个变量
val sum = (x: Int) => x+1
println(sum(2))
//匿名函数 传给一个函数
def add = (x:Int,y:Int)=>{x+y}
println(add(1,2))
}
curry函数
curry颗粒化函数
将原来接收多个参数的一个函数,转换成多个
def sum(x:Int, y:Int) = x + y
println(sum(2,3))
def sum2(x:Int)(y:Int) = x + y
println(sum2(2)(3))
高阶函数
map
reduce(reduceLeft, reduceRight)
fold(flodLeft, foldRight)
flatten、flatMap
//map: 逐个去操作集合中的每个元素 1,2,3 2 1,2,3,4,5 3
val list = List(1,2,3,4,5)
list.map((x:Int) => x + 1)
list.map(x => x * 2)
list.map(_ * 2)
//filter: 过滤元素
list.map(_ * 2).filter(_ > 5)
//take:取元素的前n个
list.take(3).foreach(println)
//reduce,对集合中的元素进行归约操作,不指定left还是right默认是left
//两两相加 1+2=3 3+3=6 6+4=10 10+5=15
list.reduce(_+_)
//从左向右归约
//1-2=-1 -1-3=-4 -4-4=-8 -8-5=-13
list.reduceLeft(_-_)
//从右向左归约
//4-5=-1 3-(-1)=4 2-4=-2 1-(-2)=3
list.reduceRight(_-_)
/**
* fold,对集合中的元素进行折叠操作,不指定left还是right默认是left
* fold()操作需要从一个初始值开始,并以该值作为上下文,处理集合中的每个元素
*/
//第一个参数0为Int类型的初始值,第二个参数为返回类型为Int的函数
val sumD:Int = list.fold(0)((x,y)=>{
x+y
})
/**
* 从左向右折叠,以下操作初始值为0,相当于上面的reduceLeft
* flodLeft的简写 /:
*/
val sumL:Int = list.foldLeft(0)((x,y)=>{
x+y
})
val sumL2 = (0/:list)(_+_)
/**
* 从右向左折叠,以下操作初始值为0,相当于上面的reduceRight
* foldRight的简写 :\
*/
val sumR:Int = list.foldRight(0)((x,y)=>{
x-y
})
val sumR2 = (list:\0)(_-_)
val flatList = List(List(1,2),List(3,4),List(4,5))
//flatten,将List[List]类型合并为List[String] 结果为 List(1, 2, 3, 4, 4, 5)
val fl = flatList.flatten
//flatMap,将集合打扁后对每个元素操作
var fm = flatList.map(_.map(_*2))//List(List(2, 4), List(6, 8), List(8, 10))
var fm2 = flatList.flatMap(_.map(_*2))//List(2, 4, 6, 8, 8, 10)