scala集合常用函数0902.3

集合常用函数

一、集合基本方法
var list = List(1,2,3,4)
list.sum //求和
list.max//求最大值
list.min//求最小值
list.product//求乘积
list.reverse//反转
二、高级函数初识【groupBy】
高阶函数: 内部持有当前集合的引用,内部迭代把迭代的每个元素、给我们自己定义的函数,我们可以对集合中的每个元素做操作了

    var list = List(1,2,2,3,3,3,4,4,4,4)
    val intToInts: Map[Int, List[Int]] = list.groupBy(t=>t)
    intToInts.foreach(t=>println(t._1 +"-"+t._2 + ";"))

三、高阶函数(groupBy)按照首字母进行分组

	var list=List("Great","minds","have","purpose","others","have","wishes")
    var charToString=list.groupBy(i=>i.charAt(0))
    var stringToString=list.groupBy(i=>i.substring(0,1))
    println(charToString)
    println(stringToString)

四:对List列表的奇偶数进行分组

	var list: List[Int] = List(1,2,3,4)
	val booleanToInts= list.groupBy(i=>i%2==0)

五、高阶函数sortWith(指定规则进行排序)

    var list= List(5,6,1,2,3,4)
    val ints= list.sortBy(x=>x)
    val ints= list.sortWith((x,y)=>x>y)
	 val ints= list.sortWith((x,y)=> {
	    println(x+"-"+y)
	      x>y
	    })

六、简易版本WordCount

 	var list=List(...)
    var tuple=list.map(x=>(x,1))
    var stringToTuples=tuple.groupBy(x=>x._1)//分组
    var intToInts=stringToTuples.map((x=>(x._1,x._2.size)))//统计

七、flatmap / fliter / zip 等函数的使用

zip:
    var list1= List(1,2,3)
    var list2 = List(4,5,6)
    val tuples: List[(Int, Int)] = list1.zip(list2)
union:
	var list1= List(1,2,3)
    var list2 = List(1,2,4)
    val ints= list1.union(list2) // 列表合并
集合:
   	val ints= list1.intersect(list2)//交集
   	val ints= list1.diff(list2)//差集
filter(过滤器):
	val list = List(1,2,3,4)
    val filterRDD= list.filter(x=>true)
    filterRDD.foreach(t=>println(t))
flatMap 扁平化 数组里面的值的类型作为泛型
      val list: List[String] = List("hello A","hello B","hello C")
      val flatMapRDD: List[String] = list.flatMap(x=>x.split(" "))
      val groupByRDD: Map[String, List[String]] = flatMapRDD.groupBy(word=>word)
      groupByRDD.map(t=>(t._1,t._2.size)).foreach(println)

// 单词出现次数最多的前Top3
    var wordList: List[String] = List(...)
    //  按照单词进行分组
    val groupByRDD= wordList.groupBy(word=>word)
    // 单词进行计数
    val mapRDD= groupByRDD.map(t=>(t._1,t._2.size))
    //按出现次数排序
    val sortWithRDD= mapRDD.toList.sortWith((a,b)=>a._2 > b._2)
    //取前3
    val result: List[(String, Int)] = sortWithRDD.take(3)

八、WordCount加强版

    var lineList: List[(String, Int)] =  List(...)
    //拆分
    val flatMapRDD= lineList.flatMap(t => {
      val line= t._1
      val words= line.split(" ")
      val mapRDD= words.map(w => (w, t._2))
      mapRDD
    })
   //组合
    val groupByRDD= flatMapRDD.groupBy(t=>t._1)
    //合并计算
    val finalMapRDD= groupByRDD.map(t => {
      val countList= t._2.map(tt => tt._2)
      (t._1, countList.sum)
    })
    //输出
    finalMapRDD.foreach(println)

案例一:WordCount2.0

    var list= List(("hello A",4),("hello B",3))
    val flatMapRDD= list.flatMap(t => {
      val mapRDD=t._1.split("\\s+").map(w => (w, t._2)) //"\\s+"匹配多个空格
      mapRDD
    })//分别按各个单词统计次数
    val groupByRDD= flatMapRDD.groupBy(t=>t._1)//分组
    val stringToInt= groupByRDD.mapValues(datas=>datas.map(t=>t._2).sum)//求和
    for (i<-stringToInt)

mapValues高阶函数
【对象类型的泛型:Map类型】
【只对集合中value做操作、key保持不变】
一般用于分组求最大、最小、均值、求和

案例二:reduce (聚合、规约)

    var list=List(1,2,3,4)
    var res1=list.reduce((l,r)=>l+r)
    var res2=list.reduce(_+_)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值