回顾
变量的定义
1.var 修饰的变量是可变的
2.val 修饰的变量是不可变的
3.数据类型:Any(AnyVal(Boolean、Unit)、AnyRef)
4.条件表达式 :if…else if…else
5.循环 for(变量<-表达式/集合/数组;if 守卫)
6.方法的定义,使用关键字def
def 方法名称(参数列表,方法的返回值类型=方法体)
7.函数的定义:=>
方法一:函数的参数列表=>函数体
方法二:函数的参数类型列表=>函数的返回值类型=(函数的参数变量引用)=>函数体
8.传名调用&传值调用
val f=(a:Int,b:Int)=>a+b
add(f,2+8,6){f(10,6)}//10+6
可变参数
可变参数一般放在参数列表的末尾
参数的默认值:参数定义是可以给定一个默认值,调用时,如果不传递参数,即会使用函数或方法的默认值,如果传递了参数值,则使用传递的参数值
def add(a:Int=6,b:Int=5)={
a+b
}
高阶函数:将其他函数作为参数或其结果是函数的函数
//定义一个方法,参数为带一个整形参数返回值为整形的函数f和一个整形参数v,返回值为一个函数
def apply(f:Int=>String,v:Int)=f(v)
//定义一个方法,参数为一个整形参数,返回值为String
def layout(x:Int)="["+x.toString()+"]"
//调用
ptintf(apply(layout,10))
部分参数应用函数:如果函数传递所有预期的参数,则表示已完全应用它。
柯里化函数:将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数。
偏函数:PartialFuntion[参数类型,返回值类型]
- f1=:PartialFuntion[Any,Int]={
case i:Int=>i*10
}
val arr=ArrayAny
val collect=arr.coleect(f1)
println(collect.toBuffer)
输出:ArrayBuffer(10,20,40)
2.arr.map{case x:Int=>x*10}
数组的定义:定义一个固定长度的数组,长度可变,内容可变
map/flatten/flatMap/foreach方法的使用:
map(映射):
val fx=(x:Int)=>x10
//arr 见过map映射操作之后会返回一个新的数组
val r1=arr.map(fx)
arr.map((x:Int)=>x10)
flatten(扁平化操作):
val arr1:Areay[String]=Array(“hello hello tom”,“hello jerry”)
//Array(Array(“hello”,“hello”,“tom”),Array(“hello”,“jerry”)
var r2:Array[Array[String]]=arr1.map(_.split(" "))
//Array(“hello”,“hello”,“tom”,“hello”,“jerry”)
r2.flatten
//flaMap=map->flatten
flatMap(先Map再flatten):
arr1.flatMap(_.split(“ ”))
foreach(循环遍历):
arr1.flatMap(_.split(“ ”)).foreach(x=>println(x))
//hello,hello,tom,hello,jerry
groupBy:
arr1.flatMap(.split(“ ”)).groupBy(x=>x)
mapValues(对键值对每个value都应用一个函数,但是,key不会发生变化。):
arr1.flatMap(.split(“ ”)).groupBy(x=>x).mapValues(_.length)
排序操作:
arr1.flatMap(.split(“ ”)).groupBy(x=>x).mapValues(.length).toList.sortBy(x=x.2)(正序)
arr1.flatMap(.split(“ ”)).groupBy(x=>x).mapValues(_.length).toList.sortBy(x=- x._2)(倒序)
**总结:**求每个单词出现的数量 wordcount
arr1.flatMap(x=x.split(" ")).groupBy(x=>x).mapValues(x=>x.length).toList.sortBy(x=x._2)
集合的常用操作
scala的集合有三大类:序列seq、集set、映射Map,所有的集合都拓展来着iterable特质,在scala中集合有可变(mutable)和不可变(immutable)两种类型,immutable类型的集合初始化后就不能改变了(注意与val修饰的变量进行区别)
**Array:**内容都可变,分为长度可变数组(ArrayBuffer),长度不可变数组(Array)
HashMap:mutable包下的可变Map
**Seq序列:**在scala中列表要么为空(Nill表示空列表)要么是一个head元素加上一个tail列表。
// 9::LIst(5,2) ::操作符是给定的头和尾创建一个新的列表
:::拼接两个List
fold(折叠):将初始值与LIst叠加