scala中常用特殊符号详解

=>(匿名函数) 

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

Spark的匿名函数定义格式:

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

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

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

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

示例:

class Symbol {
 var add = (x: Int) => x + 1
}

object test2 {
 def main (args: Array[String] ): Unit = {
  var symbol = new Symbol
  printf(""+ symbol.add.toString())
 }
}

<- (集合遍历)

循环遍历,示例如下:

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

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

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

++=(字符串拼接)

var s:String = "a"
s+="b"
println(s)
s++="c"
println(s)

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

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

scala操作示例:

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

val four = 7 :: three

println(four.toString())

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

1.scala中元组含义:

  • 元组是不同类型的值聚集线程的列表
  • 通过将多个值使用小括号括起来,即表示元组

2.scala中元组与数组区别:数组中元素 数据类型必须一样,但是元组数据类型可以不同。

示例程序:

val first = (1,2,3) // 定义三元元组

val one = 1
val two = 2
val three = one -> two

println(three) // 构造二元元组

println(three._2) // 访问二元元组中第二个值

_(下划线)的用法

通配符

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

import org.apache.spark.SparkContext._

指代集合中的每一个元素

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

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

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

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

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

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

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

var s:Int=_
def main(args: Array[String]): Unit = {
  println(s)
}

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

def main(args: Array[String]): Unit = {
  val s = sum(1 to 5:_*)   //把1 to 5当作一个序列处理
  println(s)
}

def sum(args: Int*) : Int = {
  var result = 0 ;
  for(s2 <- args) {
   result += s2 ;
  }
  result ;
}

+=

为可变数组添加元素

val arrBuf1 = new ArrayBuffer[Int]()
arrBuf1+= 11 // 添加一个元素

println(arrBuf1)

-=

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

val arrBuf1 = new ArrayBuffer[Int]()
arrBuf1+= 11 // 添加一个元素
arrBuf1+= 12 // 添加一个元素
arrBuf1-= 12 // 删除一个元素

println(arrBuf1)

var map = Map(1 -> 1,2 -> 2,3 ->3 )
map-=1
println(map)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • IntelliJ IDEA下Maven创建Scala项目的方法步骤

    环境:IntelliJ IDEA 版本:Spark-2.2.1 Scala-2.11.0 利用 Maven 第一次创建 Scala 项目也遇到了许多坑 创建一个 Scala 的 WordCount 程序 第一步:IntelliJ IDEA下安装 Scala 插件 安装完 Scala 插件完成 第二步:Maven 下 Scala 下的项目创建 正常创建 Maven 项目(不会的看另一篇 Maven 配置) 第三步:Scala 版本的下载及配置 通过Spark官网下载页面http://spark.a

  • 深入学习java中的Groovy 和 Scala 类

    前言 Java 传承的是平台,而不是语言.有超过 200 种语言可以在 JVM 上运行,它们之中不可避免地会有一种语言最终将取代 Java 语言,成为编写 JVM 程序的最佳方式.本系列将探讨三种下一代 JVM 语言:Groovy.Scala 和 Clojure,比较并对比新的功能和范例,让 Java 开发人员对自己近期的未来发展有大体的认识. Java 语言的开发人员精通 C++ 和其他语言,包括多继承(multiple inheritance),使得类可以继承自任意数量的父类.多继承带来的一

  • 浅析scala中map与flatMap的区别

    在函数式语言中,函数作为一等公民,可以在任何地方定义,在函数内或函数外,可以作为函数的参数和返回值,可以对函数进行组合.由于命令式编程语言也可以通过类似函数指针的方式来实现高阶函数,函数式的最主要的好处主要是不可变性带来的.没有可变的状态,函数就是引用透明(Referential transparency)的和没有副作用(No Side Effect). 任何一种函数式语言中,都有map函数与faltMap这两个函数,比如python虽然不是纯函数式语言,也有这两个函数.再比如在jdk1.8之后

  • scala中的隐式类型转换的实现

    Scala语言中的隐式转换是一个十分强大的语言特性,主要可以起到两个作用: 一.自动进行某些数据类型的隐式转换 String类型是不能自动转换为Int类型的,所以当给一个Int类型的变量或常量赋予String类型的值时编译器将报错.所以,一下语句是错误的. val x: Int = "100" 如果需要将一个字符串类型的整形数值赋给Int,比如使用String.toInt方法,例如: val x: Int = "100".toInt 如果想让字符串自动转换为整形,就

  • 使用Scala生成随机数的方法示例

    一.使用Scala生成随机数 1.简单版本: /* 1.you can use scala.util.Random.nextInt(10) to produce a number between 1 and 10 2.at the same time,you nextInt(100) to produce a number between 1 and 100 */ object Test { def main(args: Array[String]) { var i = 0 while(i <

  • Scala求和示例代码

    Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性. Scala 运行在Java虚拟机上,并兼容现有的Java程序. Scala 源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库. def sum(f: Int => Int)(a: Int)(b: Int): Int = { @annotation.tailrec def loop(n: Int, acc: Int): Int = { if

  • Scala的文件读写操作与正则表达式

    目录 在本篇文章中你将会学习并了解常用的文件处理任务,例如读取文件的一行文本,本博客的要点包含: 1.Source.fromFile(...).getLines.toArray 输出文件所有行 2.Source.fromFile(...).mkString 以字符串形式输出文件内容 3.将字符串转换为数字,可以使用toInt或toDouble方法 4.使用java的PrintWriter写入文本文件 5."正则".r是一个Regex对象 6.若你的正则表达式包含反斜杠或者引号,请用&q

  • scala当中的文件操作和网络请求的实现方法

    1.读取文件当中每一行的数据 def main(args: Array[String]): Unit = { //注意文件的编码格式,如果编码格式不对,那么读取报错 val file: BufferedSource = Source.fromFile("F:\\files\\file.txt","GBK"); val lines: Iterator[String] = file.getLines() for(line <- lines){ println(li

  • Scala入门之List使用详解

    Scala中使用List Scala是函数式风格与面向对象共存的编程语言,方法不应该有副作用是函数风格编程的一个重要的理念.方法唯一的效果应该是计算并返回值,用这种方式工作的好处就是方法之间很少纠缠在一起,因此就更加可靠和可重用.另一个好处(静态类型语言)是传入传出方法的所有东西都被类型检查器检查,因此逻辑错误会更有可能把自己表现为类型错误.把这个函数式编程的哲学应用到对象世界里以为着使对象不可变. 前面一章介绍的Array数组是一个所有对象都共享相同类型的可变序列.比方说Array[Strin

  • Scala中的mkString的具体方法

    1.mkString()方法的使用: mkString(seq:String)方法是将原字符串使用特定的字符串seq分割. mkString(statrt:String,seq:String,end:String)方法是将原字符串使用特定的字符串seq分割的同时,在原字符串之前添加字符串start,在其后添加字符串end. object Test { def main(args: Array[String]): Unit = { var name : String = "Hello Little

  • Scala实现冒泡排序、归并排序和快速排序的示例代码

    1.冒泡排序 def sort(list: List[Int]): List[Int] = list match { case List() => List() case head :: tail => compute(head, sort(tail)) } def compute(data: Int, dataSet: List[Int]): List[Int] = dataSet match { case List() => List(data) case head :: tail

随机推荐