目录
一、apply方法说明
二、scala中,::,+:,:+,:::,+++的区别
三、Scala中的元组
当scala中类或者对象有一个主要用途的时候,apply方法就是一个很好地语法糖。
伴生对象的解释是:实现类似 Java 中那种既有实例成员又有静态成员的类的功能。
为什么上面说它是一种 “功能” 呢?因为要想实现像 Java 中那样的类,光靠一个 Scala 类可不行。在 Scala 中,我们必须:
1. 定义一个 class 并在这里面实现所有的实例成员。
2. 添加一个 object ,这个 object 要与上面的 class 同名,然后在这里面实现所有的静态成员。
3. 定义的 class 与 object 必须在同一个文件内
满足了上面 3 条要求以后,就可以实现类似 Java 中一个类既存在实例成员又存在静态成员的功能了。然后我们通常把第 2 步添加的 object 称为 “伴生对象” 。
请看下面一个简单的例子:
class CompanionDemo {
println("new CompanionDemo clz")
def init(): Unit = {
// our codes...
}
}
object CompanionDemo {
println("new CompanionDemo object")
def prt(): Unit = {
// our codes...
}
}
初学scala的人都会被Seq的各种操作符所困惑。下面简单列举一下各个Seq操作符的区别
4种操作符的区别和联系
(1) :: 该方法被称为construct,意为构造,向队列的头部追加数据,创造新的列表。用法为: x::list,其中x为加入到头部的元素,无论x是列表与否,它都只将成为新生成列表的第一个元素,也就是说新生成的列表长度为list的长度+1(btw, x::list等价于list.::(x))
(2) :+和+: 两者的区别在于 :+方法用于在尾部追加元素,+:方法用于在头部追加元素,和::很类似,但是::可以用于pattern match ,而+:则不行. 关于+:和:+,只要记住冒号永远靠近集合类型就OK了。
(3)++ 该方法用于连接两个集合,list1++list2
(4) ::: 该方法只能用于连接两个List类型的集合
(5)变长数组的增删改操作
使用+=添加元素
使用-=删除元素
使用++=追加一个数组到变长数组
def main(args: Array[String]): Unit = {
val a:List[String] = List("22","33")
println(1::a)
val b:List[String] = List("张三","李四")
println(":: 头部追加数据,无论x是列表与否,它都只将成为新生成列表的第一个元素,长度为list的长度+1")
println(b::a) //List(List(张三, 李四), 22, 33),长度为list的长度2+1
println(a::b)
//记住冒号永远靠近集合类型
println("+:方法用于在头部追加元素")
println(a+:"B") //类型为B
println("B"+:a) //类型为a
println(":+方法用于在尾部追加元素")
println(a:+"C") //类型为a
println("C":+a) //类型为c
println("++ 该方法用于连接两个集合,list1++list2")
println(a++b)
println(b++a)
println(a++"B")
println("::: 该方法只能用于连接两个List类型的集合")
println(a:::b)
println(a:::"b") //会报错,只能用于两个List类型的集合
}
https://www.pianshen.com/article/87811154749/
映射是K/V对偶的集合,对偶是元组的最简单形式,元组可以装着多个不同类型的值
//获取元组中的元素可以使用下划线加脚标,但是注意点:元组中的元素脚标是从1开始的
def main(args: Array[String]): Unit = {
//映射是K/V对偶的集合,对偶是元组的最简单形式,元组可以装着多个不同类型的值。
//定义元祖时,用小括号将多个元素包起来,元素之间用逗号分割,
//元素的类型可以不一样,元素个数可以任意多个
//创建元组
val t = ("spark",3.14,1024,("张三",true))
println(t)
//获取元组中的值
val t1,(a,b,c) = ("spark",3.14,1024)
println(t1)
val r1 = t1._1
println(r1)
println(t1._2)
//将对偶的集合转换成映射
val arr = Array(("张三",30),("李四",21))
//toMap可以将对偶的集合转换为映射
val arrMap = arr.toMap
println(arrMap)
//拉链操作
//zip命令可以将多个值绑定在一起
val name = Array("张三","李四","王五")
val scores = Array("15","86","67")
//使用zip方法将对应的值帮到一起
val zipTemp = name.zip(scores)
println(zipTemp)
println(zipTemp.toMap)
}
注意:如果两个数组的元素个数不一致,拉链操作后生成的数组的长度为较小的那个数组的元素个数
注:元组和数组的区别:
https://blog.csdn.net/mozhizun/article/details/68099194 --Scala和Java的语法差异