栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

scala学习笔记08

scala学习笔记08

scala学习笔记08_集合操作 1. 前置操作符、中置操作符、后置操作符
object ExpressDemo {
  def main(args: Array[String]): Unit = {
    val n1 = 1
    val n2 = 2
    val r1 = n1 - n2   //中置操作符相当于操作符是方法名,可以直接省略点调用
    val r2 = n1.-(n2) //看Int的源码即可说明
    println("r1=" + r1 + " r2=" + r2)


    val op = new Opreate
    println(op+++)//后置操作符
    !op//前置操作符
  }
2. 高级函数
object HigherOrderFunction {

  def main(args: Array[String]): Unit = {

    val finalResult = step2(step1, 5)
    println(finalResult)
  }

  def step1(originalParam:Int):Int = {
    println("compute step1")
    originalParam*originalParam

  }

  def step2(f: Int => Int, originalParam: Int): Int ={
    println("compute step2")
    val step1Result = step1(originalParam)
    step1Result*step1Result

  }
}
3. 集合操作

3.1 过滤函数 Filer

object FilerDemo {

  def main(args: Array[String]): Unit = {

    val score = List(33, 44, 55, 66, 99, 100)
    val passedScore = score.filter(isPassed)
    println(passedScore)
  }

  def isPassed(score:Int):Boolean={
    score>60
  }
}

3.2 Map函数

object MapDemo {
  def main(args: Array[String]): Unit = {

    val ints = List(2, 4, 666)

    val strings = ints.map(f1)
    println(strings)


  }
//左边补零
  def f1(int:Int): String ={
     f"$int%3d".replaceAll(" ", "0")
  }

}

3.3 FlatMap

object FlatMapDemo {

  def main(args: Array[String]): Unit = {
    val ints = List("abc")
    val chars = ints.flatMap(f2);
    println(chars)


  }

  def f2(orginalChar:String):String = {
    orginalChar.toUpperCase
   }

}

    4 Fold
object FoldDemo {
  def main(args: Array[String]): Unit = {
    val ints = List(1, 2, 3);

    println(ints.fold(111)(_-_))

    println(ints.fold(6)(sumF));


    

    var sumVar = (100 /:ints)(sumF)
    println(sumVar)
  }

  def sumF( num1 : Int, num2 : Int ): Int = {
    println("num1 "+num1)
    println("num2 "+num2)
    num1 + num2
  }
}
    5 iterator 迭代器
object IteratorDemo {
  def main(args: Array[String]): Unit = {
    val ints = List(1, 2, 3)
    val iterator = ints.iterator
    while(iterator.hasNext){
      val item = iterator.next()
      println(item)
    }
    println(iterator.hasNext)//已经迭代过了,需要重新获取一个
    val iterator1 = ints.iterator
    for(item<-iterator1){
      println(item)
    }
  }

}
    6 Reduce
object ReduceDemo {
  def main(args: Array[String]): Unit = {

    //reduceLeft与reduceRight结果相同
    val words = List("I","love","you");
    val sentence = words.reduceLeft(appendF); 0
    println(sentence)

    val sentence2 = words.reduceRight(appendF);
    println(sentence2)

    //reduceLeft与reduceRight结果不同
    val ints = List(101, 202, 3, 666);
    println(ints.reduceLeft(subtraction));
    println(ints.reduceRight(subtraction));
  }
  def appendF(word:String,word2:String):String = {
    word+" "+word2
  }

  def subtraction(number1:Int,number2:Int):Int={
        number1-number2
  }
}
    7 Scan
object ScanDemo {
  
  def main(args: Array[String]): Unit = {
    val ints = List(2, 4, 666)
    val resultInts = ints.scan(5)(sumFunction)
    println(resultInts)  //List(5, 7, 11, 677)
  }

  def sumFunction(num1:Int,num2:Int): Int ={
    num1+num2

  }
}
    8 Parallel 并行化
object ParallelDemo {
  def main(args: Array[String]): Unit = {
   (1 to 5).foreach(showItemAndThread(_))   //main
    (1 to 5).par.foreach(
      showItemAndThread(_)   //ForkJoinPool

    )

   }

  def showItemAndThread(i:Int):Unit={
    println(i)
    println(Thread.currentThread.getName)
  }
}
    9 Zip 合并
object ZipDemo {
  def main(args: Array[String]): Unit = {
    val code = List("010", "021", "020")
    val citys = List("beijing", "shanghai", "guangzhou")
    val tuples = code.zip(citys)
    println(tuples)
  }
}
4. Stream

4.1 创建

object MainObject{
  def main(args:Array[String]){
    var stream = 100 #:: 200 #:: 85 #:: Stream.empty
    println(stream)
    var stream2 = (1 to 10).toStream
    println(stream2)
    var firstElement = stream2.head
    println(firstElement)
    println(stream2.take(10))
    println(stream.map{_*2})
  }
}

4.2 关于tail

object StreamTail {
  def main(args: Array[String]): Unit = {
    //创建Stream
    def numsForm(n: BigInt) : Stream[BigInt] = n #:: numsForm(n + 1)  //死递归,但是Stream是懒加载
    val stream1 = numsForm(1)
    println(stream1) //Stream(1, ?)
    //取出第一个元素
    println("head=" + stream1.head) //1
    println(stream1.tail) //Stream(2, ?)

    println(stream1) //Stream(1, 2, ?)
    println(stream1.tail.tail) //Stream(3, ?)
    println(stream1) //Stream(1, 2, 3, ?)

  }
}

4.3 map

  
object StreamDemo3 {
  def main(args: Array[String]): Unit = {
    //创建Stream
    def numsForm(n: BigInt) : Stream[BigInt] = n #:: numsForm(n + 1)


    def multi(x:BigInt) : BigInt = {
      x * x
    }
    var stream3 = numsForm(5)
    stream3.tail
    println(stream3) //Stream(5, 6, ?)
    println(stream3.map(multi)) // Stream(25, ?)
    println(stream3.tail.map(multi)) //Stream(36, ?)

  }
}
    4 view 实现懒加载
object StreamDemo4 {
  def main(args: Array[String]): Unit = {

    val stream = numberToStream(5)
    println(stream)
    val stream2 = stream.map(multi)
    println(stream2)

    val ints = numberToStream(5).map(multi)
    println(ints)

    //Stream的懒加载特性,也可以对其他集合应用view方法来得到类似的效果
    val viewDemo = (1 to 10).view

    println(viewDemo.iterator.next())
    println(viewDemo)

  }

  def numberToStream(n:Int):Stream[Int]={
    n #:: numberToStream(n+1)
  }

  def multi(x:Int) : Int = {
    x * x
  }

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/758604.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号