33.List的一阶函数操作代码实战详解

来源:互联网 发布:淮南大数据小镇规划 编辑:程序博客网 时间:2024/06/06 12:48

一、List的drop、take、splitAt、apply、indices、toString、mkString等实战

把两个List组拼起来,列表和列表连接用三个冒号的连接操作符,元素和列表连接用两个冒号的连接操作符

    println(List(1,2,3,4) ::: List(5,6,7) ::: List(8,9))    println(List(1,2,3,4) ::: (List(5,6,7) ::: List(8,9)))    println(List(1,2,3,4).length)
输出:

List(1, 2, 3, 4, 5, 6, 7, 8, 9)
List(1, 2, 3, 4, 5, 6, 7, 8, 9)
4


List的相关操作方法:

    val bigdata = List(0,1,2)    println(bigdata.last)  //List最后一个元素    println(bigdata.init)   //List中除去最后一个元素,其余元素的集合    println(bigdata.reverse) //把List元素反转过来    println(bigdata take 2)  //取List前2个元素    println(bigdata drop 2)  //丢掉List前2个元素    println(bigdata splitAt 2) // 把List分成两部分,前面一个部分有2个元素    println(bigdata.apply(2)) //取下标为2的元素    println(bigdata(2))  //同上,取下标为2的元素

输出:

2
List(0, 1)
List(2, 1, 0)
List(0, 1)
List(2)
(List(0, 1),List(2))
2
2

List的相关操作方法:

    val data = List('a','b','c','d','e','f')    println(data indices)  //取出List所有元素相对应的索引    println(data.indices zip data)  //把左右两个集合进行拉链操作    println(data zipWithIndex)   //把元素和索引具体进行配对的简便方法    println(data.toString())     println(data mkString("[",",","]"))  //把List元素按照新的方式进行格式化输出      //第一个参数是格式化输出的开始第一个元素,第二个参数是集合中每2个元素之间的元素,第三个参数是格式化输出的最后一个元素     println(data.mkString("*"))   //格式化输出,只关心中间的元素    println(data mkString)

输出:

Range(0, 1, 2, 3, 4, 5)
Vector((0,a), (1,b), (2,c), (3,d), (4,e), (5,f))
List((a,0), (b,1), (c,2), (d,3), (e,4), (f,5))
List(a, b, c, d, e, f)
[a,b,c,d,e,f]
a*b*c*d*e*f
abcdef


List本身不变,要想作改变元素的操作,都会产生新的List,可以把对List改变的操作放在StringBuilder里

    val builder = new StringBuilder  //相当于缓冲数组    data.addString(builder,"[", ",", "]")  //把data操作后的结果存入对象    println(builder)    println(data)

输出:

[a,b,c,d,e,f]
List(a, b, c, d, e, f)

Array和List可以相互转换:

    val array = data.toArray    println(array.toList)
输出:List(a, b, c, d, e, f)

把List内容拷贝进一个数组中

    val new_Array = new Array[Char](10)  //注意要拷贝进的这个数组必须能放下List的所有元素    data.copyToArray(new_Array, 3)  //跳过数组前3个元素    new_Array.foreach(print)
输出:

   abcdef


迭代器:

    val iterator = data.toIterator    println(iterator.next)    println(iterator.next)
输出:

a
b

Spark之所以非常强大,让各个不同的框架(图计算、机器学习、流处理SQL)可以互相操作,主要因为有Iterator接口。

eg:机器学习可以直接使用Spark SQL中的内容,其中非常重要的是Spark SQL会产生RDD,要读取RDD的数据,有Iterator接口,不断next、next.......因为接口统一,读取数据的方式统一,机器学习不用关心数据来自Spark SQL还是流处理。



参考资料来源于大数据梦工厂 深入浅出scala 第33讲 由王家林老师讲解


阅读全文
0 0