Spark(day01) -- Scala

本文通过丰富的示例介绍了Scala语言的基础语法,包括数据类型、数组操作、集合处理等,并深入探讨了面向对象编程特性如继承、特质的使用方法。

一.Introduction

https://en.wikipedia.org/wiki/Scala_(programming_language)


二.Data Type



三.Example


1.functional orientation

object HelloScala extends App{

   //yield 关键字   生成新数组
    val z=for (i <- 1 to 3 ) yield i *10
    println(z)
  //把元组的元素加一,生成新数组 a
  val arr =Array(1,2,3)
  val a1=for (i <- arr) yield  i+1
  println(a1.toBuffer)

  //把奇数拿出来  生成新数组a2
  val arr1=Array(1,2,3,4,5,6,7,8,9)
  val a2=for (i <- arr1;if (i%2==1)) yield i
//  println(a2.toBuffer)
  val a3 =arr1.filter(_%2==0)
  println(a3.toBuffer)

  val lst=List(9,2,77,4,88,6,66,8,1)

  val a4= lst.map(_*10)
//  println(aarr24)
  //把list中偶数拿出,乘以3
  val a5= lst.filter(_%2==0).map(_*3)
//  println(a5)
  //对arr2进行排序
  val a6= lst.sorted
  println(a6)
  val a7 = lst.sorted.reverse
  println(a7)
//把list每四个进行分组
  val a8= lst.grouped(4)
 // println(a8.toList)
  val a9=a8.flatten
  //println(a9.toList)
  //压扁乘以10
  val a10=a8.flatten.toList.map(_*10)
  //println(a10)
  //flatMap=flatten+map
  //简化?
  val qq=List(List(1,2,3),List(4,5,6))
  //val a11=qq.flatMap(_*10)
//forech,map
  //map和foreach都是把里面的元素取出来做相应的操作
  //map会返回一个空的数组集合
  //foreach不会产生新的集合
 val arr3=Array(1,2,3,4)

  arr3.map(println(_))

  //arr3.foreach(x=>println(x))


}

ifDemo:

class IfDemo {

}
object IfDemo{
  def main(args: Array[String]): Unit = {
  val x=0
    val z={
      if (x<0){
        -1
      }else if(x>=1){
        1
      }
      else{
        "error"
      }
    }
    println(z)
  }
}

MethodDemo:

object MethodDemo extends App{
def m1(a:Int,b:Int):Int=a*b
  val res=m1(2,3)
  println(res)
}

FuncDemo:

object FuncDemo {
  def main(args: Array[String]): Unit = {
    val func=(x:Int,y:Int)=>x+y
    val res=func(2,3)
    println(res)
    //匿名函数:没有名字的函数


    //有名函数
    val r =1 to 10
    val f1=(x:Int)=>x*10
    val f2=(x:Int)=>x+1
    println(r.map(f1))
    println(r.map(f2))
    //匿名函数

    println(r.map((x:Int)=>x*100))
    println(r.map(x=>x+10))
    //注意map中的  _*1000   也是匿名函数
    println(r.map(_*1000))
  }
}

MethodAndFunc:

object MethodAndFunc {
  def main(args: Array[String]): Unit = {
    def m1(f:(Int,Int)=>Int)={f(2,3)}
    val f1=(x:Int,y:Int)=>x*y
    val f2=(x:Int,y:Int)=>x+y

    val a=m1(f1)
    println(a)
    val b=m1(f2)
    println(b)
  }
}

MutableList:

import scala.collection.mutable.ListBuffer
object MutableList {
  def main(args: Array[String]): Unit = {
    val lst0=ListBuffer[Int](1,2,3)
//    println(lst0)
    val lst1=new ListBuffer[Int]
    lst1+=4
    lst1+=5
//    println(lst1)
//    往list0里添加lst1
//    lst0++=lst1
//    println(lst0)
//    println(lst1)
    val lst2=lst0++lst1
    println(lst2)
//    往lst0里添加一个元素5 生成一个新的lst3
    val lst3=lst0:+5
    println(lst3)

  }
}

ImmutableList:

//不可变的list集合
object ImutableList {
  def main(args: Array[String]): Unit = {
    val lst1=List(1,2,3)
    val lst2=0::lst1
//    println(lst2)
    val lst3=lst1.::(0)
//    println(lst3)
    val lst4=0+:lst1
  //  println(lst4)
    val lst5=lst1.+:(7)
//    println(lst5)
//    将元素添加到后面
    val lst6=lst1:+7
//    println(lst6)
    val lst0=List(4,5,6)
    val lst7=lst1++lst0
    println(lst7)
    val lst8=lst0++:lst1
    println(lst8)
  }
}

MutableSet:

import scala.collection.mutable

object MutableSet {
  def main(args: Array[String]): Unit = {
    val set1=new mutable.HashSet[Int]()
    set1 += 2
//    println(set1)
    set1.add(4)
//    println(set1)
    set1++=Set(1,3,5)
//    println(set1)
    set1.remove(3)
//    println(set1)
    set1 -= 1
    println(set1)

  }
}

ImmutableSet:

import scala.collection.immutable.HashSet
object ImutableSet {
  def main(args: Array[String]): Unit = {
    val set1=new HashSet[Int]()
    val set2=set1+4
//    println(set2)
    val set3=set2++Set(5,6,7)
//    println(set3)
    val set0=Set(1,3,4)++set3
    println(set0)
  }
}

Array:

import scala.collection.mutable.ArrayBuffer

object ArrayDemo {
  def main(args: Array[String]): Unit = {
    val arr1=new Array[Int](8)
//    println(arr1.toBuffer)
    val arr2=Array[Int](8)
//    println(arr2.toBuffer)
    //Array下标从0开始
    val  arr3=Array("hadoop","spark","hive")
//    println(arr3(2))
//变长数组
    val ab=new ArrayBuffer[Int]()
    ab+=1

    ab+=(2,3,4,5)
    ab++=Array(6,7)
    ab++=ArrayBuffer(8,9)
    ab.insert(0,-1,0)
    ab.remove(9,2)
    println(ab)
    val arr=Array(("tom",2),("jerry",3),("jj",4))
    val newMap=arr.toMap
    println(newMap)
  }
}

MapDemo:

import scala.collection.mutable

object MapDemo {
  def main(args: Array[String]): Unit = {
    val map1=new mutable.HashMap[String,Int]()
    map1("spark")=1
//    println(map1)
    map1+=(("hadoop",2),("hive",3))
//    println(map1)
  map1.put("storm",4)

    map1.remove("storm")
    map1-="spark"
    map1("hadoop")=5
    println(map1)

    val map2=Map("jerry"->8,"tom"->9,"jj"->10)
    val map3=Map(("uu",3),("kk",4))

  }

}

Tuple:

object Tuple {
  def main(args: Array[String]): Unit = {
    val tup=("tom",3.14,5)
//    println(tup._1)
    val t,(a,b,c)=("jj",666,6.6)
    println(t)
    println(a)
    println(b)
    println(c)

  }
}

2.Object-Oriented

extend and trait: 

trait Listen{
  val name:String
  def listen()={
    println("your friend "+name+" is lietening.........")
  }
}
trait Read{
  val name:String
  def read()={
    println("your friend "+name+" is reading.........")
  }
}
trait Speak{
  val name:String
  def speak()={
    println("your friend "+name+" is speaking.........")
  }
}
class Human (val name:String) extends Read with Speak {
def listen()={
  println(name+"is listening..")
}
}
class Animal(val name:String="jj"){

  def eat()={
    println("eating")
  }
}
class Cat(override val name:String)extends Animal with Speak with Listen with Read {
  override def eat()={
    println("eating zhuzi")
}}
object Human{
  def main(args: Array[String]): Unit = {
    val scat=new Cat("tom")
    scat.eat()
    scat.listen()
    scat.read()
   // val f=new Listen ()  trait 不能实例化
    val h=new Human("jack")
    h.listen()
    h.read()
    h.speak()
  }
}

apply:

//apply  对象后面加对应的参数,这时就会在object中找参数一致的apply方法
class Human1 {

}
object Human1{
  def apply():Unit={
    println("apply方法已经被调用")
  }

  def apply(name:String):Unit={
    println(name)
  }

  def apply(age:Int):Unit={
    println(age)
  }
  def main(args: Array[String]): Unit = {
//  注意没有new

    val h=Human1(18)


  }
}

Option:

//偏函数
//scala中的option类用来表示可能存在的,也可能不存在的,他有两个子类  Some(一定有值)  None()
object Option {
  def main(args: Array[String]): Unit = {
    val a=Map(("tom",1),("jerry",2))
    val b=a.get("jj") match {
      case Some(i)  =>i
      case None=>0

        val c =a.getOrElse("tom",8)
        println(c)
    }
//    println(b)
  }
}

Person:

class Person {
  val id="5" //只有get
  var name="zhangsan"//有get,有set
  private val hobby ="LOL" //如果用private修饰一个变量,在类中可以访问
  private [this] val addr="beijing" //如果用private [this]修饰只能在class中访问
  private [day2m] val age=18   //如果用 private [包名] 修饰 可在包内访问
}
//伴生对象里面放的是一些静态的变量和方法
object Person {
  def main(args: Array[String]): Unit = {
//   实例化
    val p =new Person
    p.name="saner"

    println(p.name)
    println(p.hobby)
    println(p.id)
    println(p.age)
  }
}

Test:

//如果想调用类的方法,必须要进行实例化,new一个对象,由于object是静态的,所以直接 object名.方法名来调用

class Test1 {
val field="field"
  def doSomeTing=println("doSometing")
}
object Test1{
  val a="aString"
  def printSomeTing=println(a)

  def main(args: Array[String]): Unit = {
    Test1.printSomeTing
    val t=new Test1
    t.doSomeTing
  }

}

Student:

//sc:Int 如果这样定义相当于private[this]
class Student(val id:Int,var name:String,var addr:String="beijing",sc:Int) {


}
object Student {
  def main(args: Array[String]): Unit = {
    val stu =new Student(1,"jj","tieling",99)
    stu.name="jay"
    stu.addr="shanghai"
    println(stu.id)
    println(stu.name)
    println(stu.addr)

  }
}

People:

class People {
  val name="jack"
  println(name)
  def sayHi:Unit={
    println("hi~~~~~~~~~~")
  }
}
object People {
  def run:Unit={
    println("run~~~~~")
  }

  def main(args: Array[String]): Unit = {
    People.run
    val p=new People
    p.sayHi
  }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值