[关闭]
@boothsun 2019-12-14T16:21:58.000000Z 字数 1828 阅读 5521

Scala中常用特殊符号

大数据


参考资料:
scala中常用但其他语言不常见的符号含义
Scala学习六:Scala中的特殊字符

=>(匿名函数)

参考文档:scala => 用法 匿名函数

=> 匿名函数,在Spark中函数也是一个对象可以赋值给一个变量。

Spark的匿名函数定义格式:

  1. (形参列表) => {函数体}

所以,=>的作用就是创建一个匿名函数实例。

比如:(x:Int) => x +1 ,就等同于下面的Java方法:

  1. public int function(int x) {
  2. return x+1;
  3. }

示例:

  1. class Symbol {
  2. var add = (x: Int) => x + 1
  3. }
  4. object test2 {
  5. def main (args: Array[String] ): Unit = {
  6. var symbol = new Symbol
  7. printf(""+ symbol.add.toString())
  8. }
  9. }

<- (集合遍历)

循环遍历,示例如下:

  1. var list = Array(1,2,3,4)
  2. for (aa <- list) {
  3. printf(aa+" ")
  4. }

上面代码类似于Java的代码:

  1. int[] list = {1,2,3,4};
  2. for(int aa : list) {
  3. System.out.print(aa+" ");
  4. }

++=(字符串拼接)

  1. var s:String = "a"
  2. s+="b"
  3. println(s)
  4. s++="c"
  5. println(s)

:::三个冒号运算符与::两个冒号运算符

:::三个冒号运算符表示List的连接操作。(类似于Java中的 list1.addAll(list2))
::两个冒号运算符表示普通元素与list的连接操作。(类似于Java中的list1.add(A)操作)

scala操作示例:

  1. val one = List(1,2,3)
  2. val two = List(4,5,6)
  3. val three = one ::: two
  4. println(three.toString())
  5. val four = 7 :: three
  6. println(four.toString())

-> 构造元组和_N访问元组第N个元素

  1. scala中元组含义:

    • 元组是不同类型的值聚集线程的列表
    • 通过将多个值使用小括号括起来,即表示元组
  2. scala中元组与数组区别:数组中元素 数据类型必须一样,但是元组数据类型可以不同。

示例程序:

  1. val first = (1,2,3) // 定义三元元组
  2. val one = 1
  3. val two = 2
  4. val three = one -> two
  5. println(three) // 构造二元元组
  6. println(three._2) // 访问二元元组中第二个值

_(下划线)的用法

通配符

_可以起到类似于*作用的通配符:

  1. import org.apache.spark.SparkContext._

指代集合中的每一个元素

例如 遍历集合筛选列表中大于某个值的元素。

  1. val lst = List(1,2,3,4,5)
  2. val lstFilter = lst.filter(_ > 3)

获取元组中指定下标的元素值

  1. val ss = (1,"22","333")
  2. println(ss._1)

使用模式匹配可以用来获取元组的组员

  1. val m = Map(1 -> 2,2 -> 4)
  2. for ((k,_) <- m) println(k) //如果不需要所有部件, 则在不需要的部件使用_; 本例只取key,因此在value处用_

成员变量而非局部变量添加默认值

  1. var s:Int=_
  2. def main(args: Array[String]): Unit = {
  3. println(s)
  4. }

:_* 作为一个整体,告诉编译器你希望将某个参数当做数序列处理

  1. def main(args: Array[String]): Unit = {
  2. val s = sum(1 to 5:_*) //把1 to 5当作一个序列处理
  3. println(s)
  4. }
  5. def sum(args: Int*) : Int = {
  6. var result = 0 ;
  7. for(s2 <- args) {
  8. result += s2 ;
  9. }
  10. result ;
  11. }

+=

为可变数组添加元素

  1. val arrBuf1 = new ArrayBuffer[Int]()
  2. arrBuf1+= 11 // 添加一个元素
  3. println(arrBuf1)

-=

从map后者可变数组中移除相应的值

  1. val arrBuf1 = new ArrayBuffer[Int]()
  2. arrBuf1+= 11 // 添加一个元素
  3. arrBuf1+= 12 // 添加一个元素
  4. arrBuf1-= 12 // 删除一个元素
  5. println(arrBuf1)
  6. var map = Map(1 -> 1,2 -> 2,3 ->3 )
  7. map-=1
  8. println(map)
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注