scala的简单使用

变量的定义
在这里插入图片描述
解释:
定义变量
int和string首字母必须大写
val定义不可变对象(scala一切皆对象)
var定义可变对象
下划线为默认值
懒汉定义
在这里插入图片描述
解释:
懒汉定义变量(执行的时候才运行)
自动判断值类型
在这里插入图片描述
解释:
根据变量的值,自动的去推断数据类型
函数
在这里插入图片描述
解释:
函数的定义
函数的调用
表达式中最后一行(图中x和y)表示返回值
选择结构
在这里插入图片描述
循环结构
在这里插入图片描述
解释:
range包头不包尾
range第三个参数是步数
to包头也包尾
在这里插入图片描述
只有一行命令时大括号可以省略

if(flag) “aa” else “bb”

for循环结构

object ForDemo {
  def main(args: Array[String]): Unit = {
    val arr = 1 to 10
    for (item <- arr){
      print(s"值:$item")
    }
    println()
    println("——————靓丽的分割线——————")
    for (item <- arr if item%2 == 0){
      print(s"值:$item")
    }
    println()
    println("——————靓丽的分割线——————")
    for (item <- arr if item%2 == 0)print(s"值:$item")
    println()
    println("——————靓丽的分割线——————")
   for (i <- 1 to 9){
     for (j <- 1 to 9){
       if (j==1) println()
       print(s"${i * j}  ")
     }
   }
    println()
    println("——————靓丽的分割线——————")
    for {
      i <- 1 to 9
      j <- 1 to 9
    }{
      if (j == 1)println()
      print(s"${i*j}  ")
    }
    println()
    println("——————靓丽的分割线——————")
    val names = Array(" www.baidu.com ","www.google.com"," hadoop.apche.org"," ")
    for {
      name <- names
      tmpName = name.trim
      if tmpName.length>0
    }{
      println(tmpName)
    }
    println()
    println("——————靓丽的分割线——————")
    val result = for (item <- arr) yield {
      item *item
    }
    println(result)
  }
}

while循环结构

object WhileDemo {
  def main(args: Array[String]): Unit = {
    val arr: Array[Int] = Array(11,222,33,44,55,66)
    var index = 0
    while (index<arr.length){
      println(s"index=$index,value=${arr(index)}")
      index += 1
    }
  }
}

函数的使用

object FunDemo {
  //定义函数:比较2个数的较大值
  def max(x:Int,y:Int):Int = {
    if(x >y){
      x
    }else{
      y
    }
  }
  //如果一个函数的函数体只有一行代码,可以省略{}
  def max1(x:Int,y:Int):Int = if(x >y) x else y
  //如果一个函数的返回值类型,可以通过 函数体 推断得到,可以省略 返回值类型
  def max2 (x:Int,y:Int) = if(x>y) x else y
  //可以将一个函数 赋值给一个变量(注意语法)
  val max3 = max2 _
  //如果一个函数没有返回(使用Unit表示),可以省略 返回值类型 和=
  def printArray(arr:Array[Int]):Unit={
    for (item <- arr) println(item)
  }
  def printArray1(arr:Array[Int])=for (item<-arr)println(item)
  def printArray2(arr:Array[Int]) {
    for (item<-arr)println(item)
  }
  //定义函数的时候,可以给函数参数赋值,称为参数的默认值
  //注意点:有默认的参数,参数必须放在最后面
  def sayHello(name:String,msg:String="狗比"): Unit ={
    println(msg+name)
  }
  //在调用函数的时候,可以指定参数名称
  //传递参数的顺序可以和函数声明的顺序不一致(了解)
  def sayHello1(name:String,msg:String): Unit ={
    println(msg+name)
  }
  //局部函数:函数内定义函数,被外部函数调用
  def f1()={
    println("f1()")
    //定义内部函数
    def g()={
      println("g()")
    }
    //调用内部函数
    g()
  }
  //参数可变的函数
  def printCourse(course:String*)={
    course.foreach(item => println(item))
  }



  def main(args: Array[String]): Unit = {
    println(max3(1,2))
    printArray2(Array(1,2,3,4,5,6,7,8))
    sayHello( "老李","早上好")
    sayHello1(msg = "早上好",name="老李")
    f1
    f1()
    printCourse("90","80","11")
    val courseXXX = Array("11","22","33")
    printCourse(courseXXX:_*) //:_*将数组里面的元素 铺开
    val nums = Array(1,2,3,4,5,6,7,8,9)
    //foreach方法:
    //     参数名称:f
    //     参数类型:A => U
    //def foreach(f: A => U): Unit
    nums.foreach((item)=>{
      println(item)
    })

    //def println(x: Any) = Console.println(x)
    nums.foreach(println)

    //def map[B, That](f: A => B)
    val  result = nums.map( (item)=>{
      item * item
    }  )
  }
}

高阶函数

object FunDemo1 {
  //定义了一个高级函数
  def greeting(name:String,sayHello:(String)=>Unit):Unit={
    sayHello(name)//调用传递过来的函数
  }

  def main(args: Array[String]): Unit = {
    greeting("zs",(name:String)=>{
      println(name+"哦嗨油")
    })
    greeting("小姐姐",(name:String)=>{
      println(name+"奥哈要搞砸姨妈死")
    })
    greeting("刘总",(name:String)=>{
      println(name+"早")
    })
  }

Array数组

import scala.collection.mutable.ArrayBuffer

object ArrayDemo {
  def main(args: Array[String]): Unit = {
    //创建不可变数组,赋值
    var arr = Array(1,2,3,4,5)

    //获取数组中元素:使用下标,从0开始
    println(s"firet element:${arr(0)}")
    println(s"lenght:${arr.length}")
    println(s"size:${arr.size}")

    //修改数组的值
    arr(0) = 55

    //循环数组元素
    for (item <- arr) println(item)

    //只是创建数组,不赋值
    var arr2 = new Array[Int](5)//数组长度是5,数据类型int

    //可变数组:类似于Java中List
    val buffer = new ArrayBuffer[Int]()

    //添加元素
    buffer += 11
    buffer.+=(22)
    println("_____________")
    for (item <- buffer) println(item)
    //修改
    buffer(0) = 111

    //可变数组 转成 不可变数组
    var arr3: Array[Int] = buffer.toArray
    println("___________________")
    arr3.foreach(println)

    //将数组转成字符串
    println(arr3.mkString(","))
    println(arr3.mkString("<",",",">"))

    //Scala数组可以存储各种类型
    val arr4 = Array(10,99.88,"laowang")
    val first = arr4(0)
    //数据类型转换:父类 转成 子类 ,强制类型转换
    val intValue = first.asInstanceOf[Int]
    println(intValue)
  }
}

List

object ListDemo {
  def main(args: Array[String]): Unit = {
    //创建一个List,不可变的集合
    val list = List(1,2,3,4,5)

    //list组成:头+尾
    println(s"head:${list.head}")//一个元素
    println(s"tail:${list.tail}")//是一个list

    //当List只有一个元素的时候,head为元素,tail是一个空的集合
    val list2 = List(1)
    println(s"head${list2.head}")
    println(s"tail${list2.tail}")

    //list创建方式二:
    val list3 = 1::Nil   //Nil.::(1), ::从右往左运算
    val list4 = 1::2::3::Nil  //头插法
    println(list4)//List(1, 2, 3)

    //可变的集合
    import scala.collection.mutable.ListBuffer

    //创建可变的list
    val listBuffer = ListBuffer[Int]()
    //添加元素
    listBuffer += 1
    listBuffer += 2
    listBuffer += 3
    listBuffer ++= List(4,5,6)
    listBuffer += (7,8,9)

    //可变的List转成不可变
    val list5 = listBuffer.toList
    println(list5.mkString(","))//1,2,3,4,5,6,7,8,9

    //判定List是否为空
    println(list5.isEmpty)

    //判定list是否存在某个元素
    println(list5.contains(9))
  }
}

List方法

object ListFunDemo {
  def main(args: Array[String]): Unit = {
    //创建一个List,不可变的集合
    val list = (1 to 10).toList
    // def map[B](f: A => B): TraversableOnce[B]
    //map - >  f:(A) => B
    // A:集合List中数据类型、

    val mapList = list.map((item)=>{
      item*item
    })
    val mapList1 = list.map(item=>item*item)
    //println(mapList1.mkString(","))

    //分割单词
    val lineList = List(
      "hadoop hive spark hadoop java",
      "spark java sqool hive",
      "hadoop hive spark java"
    )
    //String -> Array(Iterable)
    val xx: List[Array[String]] = lineList.map(line=>line.split(" "))

    //flatMap压平函数
    val flatMap: List[String] = lineList.flatMap(line=>line.split(" "))
    //println(flatMap.mkString(","))

    //过滤
    val filterList = list.filter(item=>item%2==0)//为true留下
    val filterList1 = list.filter(_ %2==0)//为true留下
    //println(filterList1.mkString(","))

    list.filterNot(item=>item%2==0)//
    val fileterNOt1: List[Int] = list.filterNot(_ %2==0)//
    //println(fileterNOt1.mkString(","))

    //分组
    // def groupBy[K](f: A => K)
    //A:List中元素,K:分组类别
    val groupKey = list.groupBy(item=>item%3)
    //groupKey.foreach(println)

    //排序
    /**
      * sorted
      *  默认情况下,依据集合中List的元素,自然排序规则:升序
      * sortBy
      *   指定元素的排序规则(升序,还是降序)
      */
    val list2 = List(11,8,12,88,33,55,77,24,46,34)
    //println(list2.sorted.mkString(","))//8,11,12,24,33,34,46,55,77,88
    //println(list2.sortBy(item => -item))List(88, 77, 55, 46, 34, 33, 24, 12, 11, 8)
    //println(list2.sortWith((x1,x2)=>x1>x2).mkString(","))//88,77,55,46,34,33,24,12,11,8
    //println(list2.sortWith((x1,x2)=>x1<x2).mkString(","))//8,11,12,24,33,34,46,55,77,88
    //println(list2.sortWith(_ < _).mkString(","))//8,11,12,24,33,34,46,55,77,88

    //reduce  ->   op: (A1, A1) => A1
    //第一个参数A1: 可以理解为 聚合时  临时变量 ,初始值 集合head的值
    //第二个参数A2:每个元素的值
    val reduce = list.reduce((x1,x2)=>{
      println(s"x1=$x1,x2=$x2")
      x1 + x2
    })
    println(reduce)
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值