Scala基本类型、字符操作和WordCount例子(语法基础一)

前言:欢迎走进Scala的技术记录,再进行Scala的学习之前应该完成Scala的环境的安装和IDEA的环境配置,网上有较多的教程,实现起来也并不复杂,参考引文1

  1. 初识Scala

    Scala底层是采用JVM进行运行的,所以要想运行Scala需要先进行Java编译环境的安装,先来看一下Scala的语言的编写情况:

    object Main {
      def main(args: Array[String]): Unit = {
        println("hello Scala")
      }
    }
    

    此时,我们的初印象是,没有了结尾的分号,然后定义为object,并不是class,其实此时的object我们可以类别java的静态类,此时里面的方法和变量都是静态的,当然我们也可以使用class来声明
    一个Scala语言。

  2. 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的值。

  3. 字符串的基本操作

    字符串的声明:

      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
    
  4. 表达式与赋值

    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的用法。

  5. 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


  1. Spark 运行第一个Scala程序WordCount,https://blog.csdn.net/zxc123e/article/details/79925014 ↩︎

  2. scala 实现wordcount,https://blog.csdn.net/zhc794429974/article/details/81809356 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值