国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Scala集合常用函數(shù) - 高級(jí)計(jì)算函數(shù)

這篇具有很好參考價(jià)值的文章主要介紹了Scala集合常用函數(shù) - 高級(jí)計(jì)算函數(shù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

水善利萬物而不爭(zhēng),處眾人之所惡,故幾于道??

目錄

??1. 過濾 - filter
??2. 轉(zhuǎn)換/映射 - map
??3. 扁平化 - flatten
??4. 扁平化+映射 - flatMap
??5. 分組 - groupBy
??6. 簡(jiǎn)化(規(guī)約) - reduce
??7. 折疊 - fold
??8. 函數(shù)小練習(xí)

1. 過濾 - filter

?遍歷一個(gè)集合并從中獲取滿足指定條件的元素組成一個(gè)新的集合
//對(duì)List集合進(jìn)行遍歷,將偶數(shù)取出,放到新的集合中去

val list: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)

println(list.filter((a: Int) => {a % 2 == 0}))

println(list.filter(_ % 2 == 0))

??filter()方法的參數(shù)是一個(gè)函數(shù)類型,其返回值為布爾類型,函數(shù)體指明過濾的規(guī)則。

2. 轉(zhuǎn)換/映射 - map

?將集合中的每一個(gè)元素映射到某一個(gè)函數(shù)
//將集合中的元素進(jìn)行乘2操作
println(list.map(_ * 2))

3. 扁平化 - flatten

?flatten函數(shù)用于將嵌套的集合展平為一個(gè)單層的集合。它將嵌套的集合中的元素取出來,放入一個(gè)新的集合中。

?flatten函數(shù)只對(duì)嵌套的集合有效,如果集合中的元素不是集合類型,則flatten函數(shù)不會(huì)有任何效果

?注意: :::操作符用于連接兩個(gè)集合,它將兩個(gè)集合合并成一個(gè)新的集合。它接受右側(cè)的集合作為參數(shù),并將其添加到左側(cè)的集合之后。而flatten函數(shù)用于將嵌套的集合展平為一個(gè)單層的集合。它們的功能和用途是不同的

val list1 = List(List(1, 2, 3), List(4, 5, 6), List(7, 8, 9))
val newList1: List[Int] = list1.flatten
println(newList1)

結(jié)果:
List(1, 2, 3, 4, 5, 6, 7, 8, 9)

4. 扁平化+映射 - flatMap

? flatMap相當(dāng)于先進(jìn)行map操作,再進(jìn)行flatten操作
val strings = List("hello atguigu", "hello jingjing", "qcln jingjing")

//常規(guī)實(shí)現(xiàn)
val stringses: List[Array[String]] = strings.map(_.split(" "))
println(stringses.flatten)

// 使用flatMap函數(shù)實(shí)現(xiàn)
val strings2: List[String] = strings.flatMap(_.split(" "))
println(strings2)

5. 分組 - groupBy

?按照指定的規(guī)則對(duì)集合的元素進(jìn)行分組

val nameList = List("jingjing", "banzhang", "banhua", "anqcln", "jinghua")

// 按元素首字母進(jìn)行分組
val charToStrings: Map[Char, List[String]] = nameList.groupBy(_.charAt(0))
println(charToStrings)

結(jié)果:
Map(b -> List(banzhang, banhua), j -> List(jingjing, jinghua), a -> List(anqcln))

進(jìn)階:修改分組后key的值
??直接再進(jìn)行一次map映射

// 將分組后key的值改為大寫
val keyStyle1: immutable.Iterable[String] = charToStrings.map(MapKv => {
      val upperKey: Char = MapKv._1.toUpper
      upperKey + " -- " + MapKv._2
    })
println(keyStyle1)

// 將分組后key為b的值改為X
val keyStyle2: immutable.Iterable[String] = charToStrings.map(MapKV => {
  val newKey = if (MapKV._1.equals('b')) 'X' else MapKV._1
  newKey + " -- " + MapKV._2
})
println(keyStyle2)

??說明:Scala中if條件判斷其實(shí)是有返回值的,返回值取決于滿足條件的代碼體的最后一行內(nèi)容。

6. 簡(jiǎn)化(規(guī)約) - reduce

?通過指定的邏輯將集合中的數(shù)據(jù)進(jìn)行聚合,從而減少數(shù)據(jù),最終獲取結(jié)果

?reduce:底層調(diào)用的是reduceLeft。他要求傳入的兩個(gè)參數(shù)的類型必須一致,返回值也是該類型。

?reduceLeft:傳入的兩個(gè)參數(shù)的參數(shù)類型可以不一致。它從集合左邊開始做聚合,返回值類型是左邊的類型。

?reduceRight:傳入的兩個(gè)參數(shù)的參數(shù)類型可以不一致。它從集合右邊開始做聚合,返回值類型是右邊的類型。

val list = List(1, 2, 3, 4)

val res: Int = list.reduce(_ + _)
val res: Int = list.reduceLeft(_ + _)
val res: Int = list.reduceRight(_ + _)
println(res)

println(list.reduceLeft(_ - _))  // -8
println(list.reduceRight(_ - _))  // -2

val list2: List[Int] = List(3, 4, 5, 8, 10)
println(list2.reduceRight(_ - _))   // 6

?reduceLeft:從左邊開始簡(jiǎn)化,用第一個(gè)元素減去第二個(gè)元素,然后再用結(jié)果減去第三個(gè)元素

?reduceRight:從右邊開始簡(jiǎn)化,用倒數(shù)第二個(gè)元素減去倒數(shù)第一個(gè)元素,再用倒數(shù)第三個(gè)元素減去上一個(gè)結(jié)果

從源碼角度理解reduceRight的計(jì)算方法

7. 折疊 - fold

?簡(jiǎn)化的一種特殊情況,它是集合外元素和集合內(nèi)部元素進(jìn)行聚合。計(jì)算方式和簡(jiǎn)化相似。

val list2: List[Int] = List(3, 4, 5, 8, 10)  

println(list2.fold(10)(_+_))  // 40

println(list2.foldLeft(11)(_ - _))  // -19

println(list2.foldRight(12)(_ - _))   // -6

?foldLeft:從左邊開始折疊,用集合外的元素減去集合左邊第一個(gè)元素,再用結(jié)果減去第二個(gè)元素,以此類推

?foldRight:從右邊開始折疊,用集合最后一個(gè)元素減去集合外的元素,再用集合倒數(shù)第二個(gè)元素減去結(jié)果,以此類推


8. 函數(shù)小練習(xí)

將兩個(gè)map集合中的數(shù)據(jù)合并(key相同的話,value相加)

val map1 = mutable.Map("a"->1, "b"->2, "c"->3)
val map2 = mutable.Map("a"->4, "b"->5, "d"->6)


//方法一   
// map1("e") = 9 這樣也能添加元素....
val res: mutable.Map[String, Int] = map1.foldLeft(map2)(
  // m2Jh表示map2,m1表示map1中的每一個(gè)元素
  (m2Jh, m1) => {
    // 指定合并的規(guī)則
    val m1Key: String = m1._1
    val m1Value: Int = m1._2
    // 根據(jù)map1中元素的key更新map2中的value,或者直接添加
    m2Jh(m1Key) = m2Jh.getOrElse(m1Key, 0) + m1Value 
    m2Jh
  })

//  ================================== 方法二 ================================= 
// 我寫的,通俗易懂
val res: mutable.Map[String, Int] = map1.foldLeft(map2)((m2Jh, m1) => {
  val m1Key: String = m1._1
  val m1Value: Int = m1._2

  // 在map2中獲取value,如果獲取到,執(zhí)行update更新value,如果獲取不到執(zhí)行put添加
  val flag: Int = m2Jh.getOrElse(m1Key, 0)  
  if(flag==0){
    m2Jh.put(m1Key,m1Value)
  }else{
    m2Jh.update(m1Key,m1Value+flag)
  }
  m2Jh  // 將map2集合返回,因?yàn)閒oldLeft()()的參數(shù)類型就要求的
})

println(res)

分析:

??兩個(gè)集合合并,涉及到兩個(gè)集合,用折疊fold

??折疊有三個(gè),具體選哪個(gè),fold要求集合外部元素類型和集合內(nèi)部元素類型一致,foldLeftfoldRight可以不一致,這兩個(gè)集合合并的話,明顯類型不一致,因?yàn)榉椒ㄕ{(diào)用的時(shí)候把其中一個(gè)map集合整體作為參數(shù)傳了進(jìn)去,這個(gè)參數(shù)類型是map,而方法調(diào)用者是一個(gè)map集合,內(nèi)部元素的類型是一個(gè)元組,這一個(gè)元組,一個(gè)map類型明顯不一致,所以不能用fold,那就用foldLeft得了,簡(jiǎn)單。

??最后合并的思路是什么? 把其中一個(gè)map集合作為參數(shù)傳遞進(jìn)去,然后再迭代另一個(gè)集合的時(shí)候取到key和value判斷,如果這個(gè)key在集合中存在,那么更新它的value,如果這個(gè)key在集合中不存在,將這個(gè)key和value加入到這個(gè)集合中。文章來源地址http://www.zghlxwxcb.cn/news/detail-582634.html

到了這里,關(guān)于Scala集合常用函數(shù) - 高級(jí)計(jì)算函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Scala】集合

    【Scala】集合

    目錄 類型 不可變集合 可變集合 數(shù)組 不可變 可變數(shù)組 不可變數(shù)組與可變數(shù)組的轉(zhuǎn)換 多維數(shù)組 List list運(yùn)算符 可變 ListBuffer Set 集合 不可變 Set 可變 mutable.Set Map 集合 可變 Map 元組 操作 通用操作 衍生集合操作 計(jì)算函數(shù) 排序 sorted sortBy sortWith 計(jì)算高級(jí)函數(shù) 實(shí)例 WordCount 案例

    2023年04月09日
    瀏覽(21)
  • Scala集合 - List

    水善利萬物而不爭(zhēng),處眾人之所惡,故幾于道?? 一、不可變List ? 1. 創(chuàng)建List ? 2. 取指定的數(shù)據(jù) ? 3. 向List中添加元素 ? 4. 遍歷List ? 5. 集合間合并 - 扁平化處理 二、可變List ? 1. 創(chuàng)建可變集合對(duì)象 ? 2. 添加元素 ? 3. 修改元素 ? 4. 刪除元素 1. 創(chuàng)建List ??創(chuàng)建一個(gè)L

    2024年02月15日
    瀏覽(23)
  • Scala集合 - Set

    水善利萬物而不爭(zhēng),處眾人之所惡,故幾于道?? 一、不可變Set集合 ? 1. 創(chuàng)建集合 ? 2. 添加元素 ? 3. 刪除元素 ? 4. 遍歷集合 二、可變Set集合 ? 1. 創(chuàng)建可變集合 ? 2. 添加元素 ? 3. 刪除元素 ? 4. 遍歷集合 1. 創(chuàng)建集合 ??Set點(diǎn)進(jìn)去是個(gè)特質(zhì),沒法new,直接用伴生對(duì)象的

    2024年02月16日
    瀏覽(34)
  • Scala之集合(2)

    Scala之集合(2)

    ? 目錄 集合基本函數(shù): (1)獲取集合長(zhǎng)度 (2)獲取集合大小 (3)循環(huán)遍歷 (4)迭代器 (5)生成字符串 (6)是否包含 衍生集合: (1)獲取集合的頭 (2)獲取集合的尾 (3)集合最后一個(gè)數(shù)據(jù) (4)集合初始數(shù)據(jù) (5)反轉(zhuǎn) (6)取前(后)n 個(gè)元素 (7)去掉前(后)

    2024年02月02日
    瀏覽(21)
  • Scala集合繼承體系圖

    Scala集合繼承體系圖

    1) Scala 的集合有三大類:序列 Seq、集Set、映射 Map,所有的集合都擴(kuò)展自 Iterable特質(zhì)。 2) 對(duì)于幾乎所有的集合類,Scala 都同時(shí)提供了可變和不可變的版本,分別位于以下兩個(gè)包 不可變集合:scala.collection.immutable 可變集合: scala.collection.mutable 3) Scala 不可變集合,就是指該

    2024年02月10日
    瀏覽(17)
  • Scala集合

    Scala集合

    scala中的集合分為兩種 ,可變集合和不可變集合, 不可變集合可以安全的并發(fā)的訪問! 集合的類主要在一下兩個(gè)包中 可變集合包 scala.collection.mutable 不可變集合包 scala.collection.immutable 默認(rèn)的 Scala 不可變集合,就是指該集合對(duì)象不可修改,每次修改就會(huì)返回一個(gè)新對(duì)象,而不會(huì)對(duì)

    2024年01月20日
    瀏覽(20)
  • Scala之集合(3)

    Scala之集合(3)

    ? 目錄 ? WordCount案例: 需求分析與步驟: 拆分: 聚合: 格式轉(zhuǎn)化: 方法1: 方法2: 排序: 方法1: 方法2: 取top3: 整體化簡(jiǎn)后的代碼: WordCoount案例升級(jí): 給定數(shù)據(jù): 方法1: 方法2: 方法3: 并行集合: ? 聚合過程較為繁瑣,分為以下幾步: (1)先將切割后的List集合

    2023年04月24日
    瀏覽(20)
  • 第7章 Scala集合

    第7章 Scala集合

    ? ? scala.collection.immutable ? scala.collection.mutable ? ? 不可變數(shù)組 可變數(shù)組 多維度數(shù)組 不可變列表 可變列表 不可變Set 可變Set ? 不可變Map 可變Map ? 通用屬性和操作 衍生集合 ? 簡(jiǎn)單計(jì)算函數(shù) ? 高級(jí)計(jì)算函數(shù) ?? ? 應(yīng)用案例-合并Map 隊(duì)列 ? 并行集合 ?

    2024年02月10日
    瀏覽(23)
  • Scala之集合(1)

    Scala之集合(1)

    目錄 ???????集合介紹: 不可變集合繼承圖:?編輯 ?可變集合繼承圖 數(shù)組: 不可變數(shù)組: 樣例代碼: 遍歷集合的方法: 1.for循環(huán) 2.迭代器 3.轉(zhuǎn)換成List列表: 4.使用foreach()函數(shù): 可變數(shù)組: ArrayBuffer: 二維數(shù)組: ?List集合: Set 集合: 不可變 Set: 可變Set: Map集合

    2023年04月18日
    瀏覽(24)
  • Scala的隊(duì)列與并行集合

    在 Scala 中,隊(duì)列和并行集合是常用的數(shù)據(jù)結(jié)構(gòu)和并發(fā)編程工具。 Scala 提供了可變和不可變兩種隊(duì)列??勺冴?duì)列通過 scala.collection.mutable.Queue 類來實(shí)現(xiàn),而不可變隊(duì)列通過 scala.collection.immutable.Queue 類來實(shí)現(xiàn)。 可變隊(duì)列可以動(dòng)態(tài)添加、移除和檢索元素,常用的方法包括 enqueue 和

    2024年02月10日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包