
Martin Odersky
scala最适合用在算法描述领域,java适合用在指令编程领域。
scala独有的两招:函数式编程、简单的并发编程
函数是scala语言中的一等公民
// 在 Scala 中,是没有 static 这个东西的,但是它也为我们提供了单例模式的实现方法,那就是使用关键字 object
object HelloWorld {
def main(args: Array[String]): Unit = {
println("hello world")
val myVal : String = "Foo";
var myVal1 = "Foo";
// 这里的下划线代表了集合中的“某(this)”一个元素。这个用法很常见,在foreach等语句中也可以使用
val newArry= (1 to 10).map(_*2)
// https://docs.scala-lang.org/zh-cn/overviews/collections/arrays.html
// Scala数组Array[Int]可看作Java的Int[]
// Array[String]可看作Java的String[]
// Scala数组是一种泛型。即可以定义一个Array[T],T可以是一种类型参数或抽象类型
val a1 = Array(1, 2, 3)
val a2 = a1 map (_ * 3)
val a3 = Array("Hi", "I", "heard", "about", "Spark")
}
}
函数式编程范式
map
filtermap
flatmap
foreach
reduce
sum
foreach只是用在不需要对集合执行映射操作,但需要遍历集合时才用到。总而言之,foreach用于遍历集合,而map用于映射(转换)集合到另一个集合
DataStream.flatmap(_.split(" ")).map((_, 1)).keyBy(0).sum(1)
创建匿名函数
=>右边是函数体,左边表示函数的参数类型
data.filter(_.nonEmpty)
data.filter(x => x!=null)