其他分享
首页 > 其他分享> > 【Scala】集合高级计算

【Scala】集合高级计算

作者:互联网

集合高级计算

( 1 )过滤
遍历一个集合并从中获取满足指定条件的元素组成一个新的集合
( 2 ) 转化 / 映射( map )
将集合中的每一个元素映射到某一个函数
( 3 )扁平化
( 4 )扁平化 + 映射 注: flatMap 相当于先进行 map 操作,在进行 flatten 操作集合中的每个元素的子元素映射到某个函数并返回新集合
( 5 ) 分组 (group)
按照指定的规则对集合的元素进行分组
( 6 )简化(归约)
( 7 )折叠
————————————————
版权声明:本文为CSDN博主「不断学习的克里斯」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_65025800/article/details/122587650

实例

object TestList {
  def main(args: Array[String]): Unit = {
    val list: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
    val list1 = List(1,2,3,4)
    val nestedList: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6), List(7, 8, 9))
    val wordList: List[String] = List("hello world", "hello atguigu", "hello scala")
 
    //(1)过滤 :筛选奇数或偶数
    println(list.filter(x => x % 2 == 0))
 
    //(2)转化/映射 :+1操作
    println(list.map(x => x + 1))
 
    //(3)扁平化 :将高维数据转为一维
    println(nestedList.flatten)
 
    //(4)扁平化+映射 注:flatMap 相当于先进行 map 操作,在进行 flatten 操作
    println(wordList.flatMap(x => x.split(" ")))
 
    //(5)分组 
    println(list.groupBy(x => x % 2))
 
    //(6)
    // reduce:将数据两两结合,实现运算规则
    val i: Int = list1.reduce( (x,y) => x-y )
    // 从源码的角度,reduce 底层调用的其实就是 reduceLeft
    //val i1 = list.reduceLeft((x,y) => x-y)
    // ((4-3)-2-1) = -2
    val i2 = list1.reduceRight((x,y) => x-y)
 
    //(7)
    // fold 方法使用了函数柯里化,存在两个参数列表
    // 第一个参数列表为 : 零值(初始值)
    // 第二个参数列表为: 简化规则
    // fold 底层其实为 foldLeft
    val j = list1.foldLeft(1)((x,y)=>x-y)
    val j1 = list1.foldRight(10)((x,y)=>x-y)
 
    // 两个 Map 的数据合并
    val map1 = mutable.Map("a"->1, "b"->2, "c"->3)
    val map2 = mutable.Map("a"->4, "b"->5, "d"->6)
    val map3: mutable.Map[String, Int] = map2.foldLeft(map1) {
      (map, kv) => {
        val k = kv._1
        val v = kv._2
        map(k) = map.getOrElse(k, 0) + v
        map
      }
    }
  }
}

WordCount案例

def main(args: Array[String]): Unit = {
    val stringList: List[String] = List(
      "hello",
      "hello world",
      "hello scala",
      "hello spark from scala",
      "hello flink from scala"
    )
 
    // 1. 对字符串进行切分,得到一个打散所有单词的列表
    //    val wordList1: List[Array[String]] = stringList.map(_.split(" "))
    //    val wordList2: List[String] = wordList1.flatten
    val wordList = stringList.flatMap(_.split(" "))
    println(wordList)
 
    // 2. 相同的单词进行分组
    val groupMap: Map[String, List[String]] = wordList.groupBy(word => word)
    println(groupMap)
 
    // 3. 对分组之后的list取长度,得到每个单词的个数
    val countMap: Map[String, Int] = groupMap.map(kv => (kv._1, kv._2.length))
 
    // 4. 将map转换为list,并排序取前3
    val sortList: List[(String, Int)] = countMap.toList
      .sortWith( _._2 > _._2 )
      .take(3)
 
    println(sortList)
}

标签:map,String,val,Scala,List,高级,println,集合,hello
来源: https://www.cnblogs.com/LittleOctopus/p/16627809.html