一直都不太明白函数式编程是什么鬼(这个也是自己以后在使用scala中慢慢需要着重理解的,感觉和js有点差不多),只是感觉它的语法怪怪的,大概写一下感觉比较重要的东西吧。
1.简述声明List的3种方式
1>常见的声明方式:var list
2>::(2个冒号)+Nil的方式:val data2=10::(20::30::15::Nil)
3>与模式进行结合
list中常用的一阶函数:
tail :List集合中除第一个元素以外其他元素的集合
init :List集合中除最后一个元素以外其他元素的集合
:::含义:将多个List集合联合起来,合成一个新的集合
take(n):获取前n个元素的集合
drop(n):去除掉List前n个元素后剩下元素的集合
splitAt(n):将List集合拆分成若干个集合
head:返回List集合中的第一个元素
last:返回list集合中的最后一个元素
length:List集合中元素的个数
reverse:List集合中的元素进行反转
indices:取出List集合中所有元素对应的索引
zip:可以将多个集合进行拉链操作,就是配对
zipWithIndex:将List中的元素与索引进行配对构成新的集合
mkString:将List集合中的元素按照指定的格式进行输出,mkString方法在spark中将数据进行格式化输出的时候非常有用
toIterator:返回能够遍历当前集合中所有元素的迭代器
toList方法常与map和flatMap进行结合使用,toListz作用在具体的字符串上面可以将字符串的list集合变成字符的list集合
map就是对集合中所有元素执行一个具体的函数,将函数作用在数值上,并返回一个新的集合的结果。
flatMap:首先对List内部的每个成员进行map操作,然后再产生结果的基础上,进行合并,产生合并之后的集合。
foreach:就是对集合中的每一个元素执行一个具体的函数,将函数作用在数值上,与map不同的是,foreach不产生具体的结果,结果是Unit类型的。
filter:过滤出列表中符合条件的元素,filter结构中传进来的参数是一个结构为布尔类型的函数。
List集合中常用的操作
partition:对集合中的元素按照某种条件进行分区
span:spand的操作类似于partition,将集合分成不同的区域
find:找出集合中第一个满足条件的元素,返回值为Some或者None
takeWhile:获取集合当中所有满足条件的元素
dropWhile:获取集合当中满足条件以外的元素
forall:只有集合当中所有元素满足条件时才返回true,否则返回false
exists:只要集合中存在一个元素满足条件就返回true
简述List中foldLeft foldRight sort函数的具体使用
foldLeft 函数体执行两元素从左到右,foldRight:函数体执行两元素操作从右到左
scala中的sortWith排序算法效率还是很高的,为线性
List中伴生对象中常用方法:
List本身是一个抽象类,抽象类不能定义处抽象类的实例对象,只能定义处抽象类的引用
List的object(伴生对象)中常用方法:
apply:构造一个List实例对象
range:指定一个范围是左闭右开的List对象,同时可以指定两个元素之间的步长
zip:拉链操作 unzip:反拉链操作 将之前zip获得的集合结果进行反操作,生成两个List集合
flatten与concat:将List内部集合中的所有元素联合构成一个新的集合,即统一构成一个list
ListBuffer ArrayBuffer分别是List与Array的新版本
Queue(队列)与Stack(堆)是两种经典的数据结构
scala中有可变集合和不可变集合之分,不可变集合就是本身是不可变的,对于不可变集合每次操作都会产生一个新的集合。
默认情况下,scala鼓励我们使用不可变对象进行编程,因此在头文件中默认引入的都是不可变的类对象。
对于Set和Map来说,元素放进去之后是没有顺序的,如果希望元素放进去之后是有顺序的可以用treeSet和treeMap存储数据,凡是将类对象放到以Tree为内部存储结构的容器中
相应的类对象按照升序进行排列