前言:欢迎走进Scala的技术记录,再进行Scala的学习之前应该完成Scala的环境的安装和IDEA的环境配置,网上有较多的教程,实现起来也并不复杂,参考引文1
-
初识Scala
Scala底层是采用JVM进行运行的,所以要想运行Scala需要先进行Java编译环境的安装,先来看一下Scala的语言的编写情况:
object Main { def main(args: Array[String]): Unit = { println("hello Scala") } }
此时,我们的初印象是,没有了结尾的分号,然后定义为object,并不是class,其实此时的object我们可以类别java的静态类,此时里面的方法和变量都是静态的,当然我们也可以使用class来声明
一个Scala语言。 -
Scala的数据类型
Scala和Java一样,存在7种数值类型Byte、Char、Short、Int、Long、Float 和 Double,以及逻辑类型 Boolean和无返回类型Unit类型。
val i = 1 val a:Int = 1 val b = 1.0 val c:Float = 1.0f
在声明变量时,我们可以声明变量的类型,也可以不声明,编译的时候会根据我们的赋值来自动的判断类型,所以在Scala中不存在包装类和基本数据类型的说法,因为所有的数据声明的时候可以指定类型也可以不指定。
val u:Unit = () println(u) 输出:()
当我们声明一个函数无参数返回
def test(): Unit ={ println("test") }
val u:Unit = test println(u)
输出为:test和(),其中()为代码中u的值。
-
字符串的基本操作
字符串的声明:
val name:String = "xiaoming" println(name)
其中的:String声明可以不写,此时写上是为了规范化
val name:String = "xiaoming" val age = 18 println(f"name=$name age=$age") println(s"name=$name age=$age") println("name="+name+" age="+age) 输出: name=xiaoming age=18 name=xiaoming age=18 name=xiaoming age=18
其中提供三种不同的字符串的拼接模式,f和s的区别在于,s可以使用操作即${内可填写对数值的操作},而f不可以:
println(s"name=$name age=${age+2}") 输出:name=xiaoming age=20
对字符串的操作,还有很多,大部分的都是Java的类似,例如以下的:
name.toCharArray name.compareTo(name) name.toUpperCase
-
表达式与赋值
Scala是面向对象和函数式编程的结合体,在语言的规范中,函数和表达式都可以赋值给变量,变量不仅仅是一个值。简单的例子:
val sexNo = 0 val sex = if(sexNo == 0) "男" else "女" println(sex)
输出结果为:男,在上面的例子中,if-else的表达式得出了两种可能性,由于sexNo的值为0,所以最终的sex的值被返回为了“男”。
循环表达式:
for(i <- 0 to 10) println(i)
代码为换行打印0到10的数,for(i <- 0 until 10) println(i),代表0-9,不包括10。
通过循环操作也可以给一个数赋值:
val studentNum = for (i <- 1 to 100) yield i
其中studentNum的值为:Vector(1, 2, 3, 4, 5, 6,…, 99, 100),中间的值省略,可以看出yield的用法。
-
wordcount实例
object WordCount { def main(args: Array[String]): Unit = { //声明一个单词集合 var codes = List("hello java hello scala", "hello world", "hello scala", "hello world") //将单词通过空格分割开 //注意此时传入的是一个操作 val words = codes.flatMap(a => a.split(" ")) //将切分好的单词划分为(key,count)模式 val tuples = words.map(a => (a,1)) //通过key进行分组 val grouped = tuples.groupBy(k => k._1) //统计相同单词的出现个数 val sum = grouped.mapValues(l => l.size) //排序 val sorted = sum.toList.sortBy(k => k._2).reverse println(sorted) } }
输出:List((hello,5), (world,2), (scala,2), (java,1))
传统的写法与上文略有不同,可参看引文中的例子,在传入表达式的时候,我尽量采用比较常规的模式来进行,引文中写的比较简洁,普遍也这样写。2
Spark 运行第一个Scala程序WordCount,https://blog.csdn.net/zxc123e/article/details/79925014 ↩︎
scala 实现wordcount,https://blog.csdn.net/zhc794429974/article/details/81809356 ↩︎