scala编程(其四)集合(list set),lazy变量

集合:是一种框架 提供了一些数据结构来收集指定的类型数据!
1,提供了一些高阶操作 如map filter reduce
2,有着可变与不可变的集合类型层次体系,可以方便的在不可变类型(稳定性)与可变类型(必要时)之间进行转换
列表的说明:
1,List是一种不可变的单链表
2,list可以创建任何一个集合 包括 元组与map
package day01
object Test4 {
  def main(args: Array[String]): Unit = {
      //scala 的集合有三大类   Seq(序列),Set(集),Map(映射)
    //list 不可变
    val list=List(1,2,3)
    val list1=0::list //list 追加  0在最前面
    val list2=0+:list //同上
    val list3=list:+0 //list 追加 0在最后
    val list4=list1++list3 //两个list进行合并 生成新的list
    val list5=list1++:list3 //两个list合并 结果同上
    val list6=list1 ::: list3 //两个list合并 结果同上

    //不可变序列 也具有不可变的方法! ::: :+ ++
    import scala.collection.mutable.ListBuffer
    val list7=ListBuffer(1,2,3)
    list7+=4  //追加 4
    list7.append(5) //追加5
    val list8 =ListBuffer(6,7,8)
    val list9 =(list7 ++ list8) //list 合并 生成新的list 不是追加
  }
}
set 的说明:
1,set包含可变与不可变,只不过可变不可变是通过类的继承差别来进行实现的
package day01

object Test5 {
  def main(args: Array[String]): Unit = {
    val set0 = Set(2,3,4)  //此时的 set 是不可变的
    println(set0)
    import scala.collection.mutable.Set //可变集合
    val set1 = Set(1,2,3)
    val set2 = set1+=4 //追加 4
    val set5 =set1 ++ Set(45)  //生成新的set
    val set4 = set1 & set5 //查看交集
    set1.add(12)  //追加12
    set1.remove(12) //移除 12
    val set3 = set1 ++ Set(1,11,5) //两个set进行合并
  }
}
lazy:惰性加载
1,scala 之中使用 lazy 进行定义的变量是惰性变量,会延时加载
2,惰性变量只能是不可变的变量 ,只有调用惰性变量的时候,才会实例化变量!
package day01

object lazya{
  def init()={
    println("这是init 方法!")
  }
  def main(args: Array[String]): Unit = {
    val pre = init() //调用init 方法!
    println("after init !")

    lazy val pre1 =init() //使用 lazy进行修饰!
    println("after init !")
    println(pre1) //调用 lazy变量,此时才执行 init() 方法!
  }
}

 scala 常用方法集合

package day01

//静态类
object Test6 {
  def main(args: Array[String]): Unit = {

    val li0 = List(1, 2, 3, 4, 5, 7, 6)
    val list1 = li0.map(_ * 2) //所有的元素*2 赋值到 新的list
    println(list1)
    println(li0.filter(_ % 2 == 0)) // filter 过滤操作!

    val list3 = li0.sorted  //正向排序
    println(list3)

    val list4 = list3.reverse  //反转降序排列
    println(list4)

    val it = li0.grouped(4) //分组!
    val list6 = it.toBuffer //转换成 buffer类型!
    val list5 = list6.toList //buffer 转换成 list类型
    println(list5)
    val list7 = list5.flatten  //多个list 压扁成一个list
    println(list7)

    val lines = List("A Q","B Z","c d","C E")
    // 按照空格进行切割
//    val world = lines.map(_.split(" "))
//    println(world.flatten)  //将 所有单词进行压平!
    println(lines.flatMap(_.split(" "))) //与上两行相同的输出!

    val arr = Array(1,2,3,4,5,6,7,8,9,10)
    println(arr.sum)  // 按部就班的求和
    // 并行计算和空闲线程有关 ,每个线程计算一部分,然后进行汇总!
    val res = arr.par.sum  //并行求和
    println(res)
    // ((1+2)+3)+4 ........
    val res = arr.reduce(_+_) //累加 前一个_是1 后一个2 一次累加
    println(arr.par.reduce(_-_)) // 并行累减
  }
}
scala 用例 按照降序统计列表次数
package day01
object Test9 {
  def main(args: Array[String]): Unit = {
      val lines = List("1 a","2 b","3 c","4 d")
//      进行压平成list
      val words = lines.flatMap(_.split(" "))
      val tuples = words.map((_,1)) //元组
      // groupBy 每一个 tuple 按照 _1分组组成 map ,然后操作map的值
      val sum = tuples.groupBy(_._1).mapValues(_.size)
//    sum.toList     //相当于 List里面包含 k,v 组成的元组
    val all = sum.toList.sortBy(_._2) //升序排列
    println(all.reverse) // 进行反转!
    println(all)
  }
}

 

posted @ 2019-03-03 15:43  十七楼的羊  阅读(375)  评论(0编辑  收藏  举报