• Scala集合笔记


    Scala的集合框架类比Java提供了更多的一些方便的api,使得使用scala编程时代码变得非常精简,尤其是在Spark中,很多功能都是由scala的这些api构成的,所以,了解这些方法的使用,将更加有助于我们学习Scala和Spark: 
    List,Map,Set的一些api的用法如下: 

    Java代码  收藏代码
    1. /** 
    2.   * Scala 集合测试 
    3.   */  
    4.  def collectionTest(): Unit ={  
    5.   
    6.    val map =Map("red"->"红色","green"->"绿色")  
    7.    val colors = List("red", "green", "blue")  
    8.    //map函数测试 ,打印长度  
    9.    val size=colors.map( (f:String) => f.size  );  
    10.    val data=List(1,2,5,3);  
    11.    //reduce函数测试 求和  
    12.    val r=data.reduce((a:Int,b:Int)=>a+b);  
    13.    println(size,"            ",r)  
    14.     //打印取值  
    15.     println(map("red"))  
    16.    //判断是否存在  
    17.    println(map.contains("white"))  
    18.    //遍历map集合  
    19.    for(pair<-map) println(pair)  
    20.   
    21.    //去重打印  
    22.    println(List(3,2,3,4,5).distinct)  
    23.    //fitler过滤  
    24.    println(List(3,12,33,64,15).filter(_ > 18))  
    25.    //扁平化处理  
    26.    println(List(List(1, 2), List(3, 4)).flatten)  
    27.    //partition 分区  
    28.    println(List(1, 2, 3, 4, 5) partition (_ < 3))  
    29.    //反转集合  
    30.    println(List(1, 2, 3).reverse)  
    31.    //slice==>与java的substring类似  
    32.    println(List(2, 3, 5, 7) slice (1, 4))  
    33.    //排序sortBy  
    34.    println(List("apple", "to","a","ab") sortBy (_.size) )  
    35.    //排序原生值  
    36.    println(List("apple", "to","bag","bbc","one").sorted)  
    37.    //splitAt值拆分一个list,根据下标的位置  
    38.    println(List(2, 3, 5, 7,99,45) splitAt 3)  
    39.    //提取第n个元素之前数据作为一个新的集合  
    40.    println(List(2, 3, 5, 7, 11, 13) take 2)  
    41.    //合并两个集合,进入一个大的集合  
    42.    println(List(1, 2) zip List("a", "b") )  
    43.    //删除前n个元素后,新生成一个集合  
    44.    println(List('a', 'b', 'c', 'd') drop 1)  
    45.    //判断两个集合是否相等  
    46.    println(List(1, 2) == List(1, 2))  
    47.    //合并两个集合 ++  
    48.    println(List(1, 2) ++ Set(3, 4, 3) )  
    49.    //合并两个集合  
    50.    println(List(1, 2) ::: List(2, 3))  
    51.    //添加一个元素  
    52.    println(1 :: 2 :: Nil)  
    53.    //添加一个元素  
    54.    println(List(1,6).:+(5))  
    55.    //遍历每一个元素,收集case匹配上的元素值,返回一个新的集合  
    56.    println(List(0, 1, 0) collect {case 1 => "ok"})  
    57.    //将一个元素,根据特定符号,拆分成单个元素组成的集合  
    58.    println(List("milk,tea") flatMap (_.split(',')))  
    59.    //最大值  
    60.    println(List(41, 59, 26).max)  
    61.    //最小值  
    62.    println(List(10.9, 32.5, 4.23, 5.67).min)  
    63.    //连乘  
    64.    println(List(5, 6, 10).product)  
    65.    //求和  
    66.    println(List(11.3, 23.5, 7.2).sum )  
    67.    //是否存在  
    68.    println(List(34, 29, 18) contains 29 )  
    69.    //是否以xxx结束  
    70.    println(List(0, 4, 3) endsWith List(4, 3))  
    71.    //是否以xxx开始  
    72.    println(List(0, 4, 3) startsWith List(0) )  
    73.    //最少有一个值小于18即为true  
    74.    println(List(24, 17, 32) exists (_ < 18))  
    75.    println("=======================================")  
    76.    //必须得所有值小于18才返回true  
    77.    println(List(5, 17, 2) forall (_ < 18) )  
    78.    //求和  
    79.    println(List(4, 5, 6).fold(8)(_ + _))  
    80.    //求和  
    81.    println(List(4, 5, 6).foldLeft(10)(_ + _))  
    82.    //求和  
    83.    println(List(4, 5, 6).foldRight(0)(_ + _) )  
    84.    //求和  
    85.    println(List(4, 5, 6).reduce(_ + _) )  
    86.    //求和  
    87.    println(List(4, 5, 6).reduceLeft(_ + _) )  
    88.    //求和  
    89.    println(List(4, 5, 6).reduceRight(_ + _) )  
    90.    //阶段求和  
    91.    println(List(4, 5, 6).scan(0)(_ + _))  
    92.    //阶段求和  
    93.    println(List(4, 5, 6).scanLeft(0)(_ + _))  
    94.    //阶段求和  
    95.    println(List(4, 5, 6).scanRight(0)(_ + _))  
    96.    //集合转换字符串  
    97.    println(List(24, 99, 104).mkString(", "))  
    98.    //转成ArrayBuffer  
    99.    println(List('f', 't').toBuffer)  
    100.    //转Map to List  
    101.    println(Map("a" -> 1, "b" -> 2).toList )  
    102.    //转Set to Map  
    103.    println(Set(1 -> true, 3 -> true).toMap)  
    104.    //转List to Set  
    105.    println(List(2, 5, 5, 3, 2).toSet)  
    106.    //转List to String  
    107.    println(List(2, 5, 5, 3, 2).toString)  
    108.   
    109.    //Java 与 Scala 集合互转  
    110.    //导入包  
    111.    import  collection.JavaConverters._  
    112.    import  collection.JavaConversions._  
    113.    import java.util.ArrayList;  
    114.    // scala 转 java  
    115.    val ja  =List(1,5,3).asJava  
    116.    println(List(1,5,3))  
    117.    println(ja)  
    118.   // java 转 scala  
    119.    val s =new java.util.ArrayList(3).asScala;  
    120.   
    121.    //集合的模式匹配  
    122.   
    123.    val statuses = List(500, 404)  
    124.   
    125.    val msg = statuses.head match {  
    126.     case x if x < 500 => "okay"  
    127.         case _ => "whoah, an error"  
    128.         }  
    129.   
    130.    println("信息:",msg)  
    131.    val msg2 = statuses match {  
    132.     case x if x contains(500) => "has error"  
    133.        case _ => "okay"  
    134.         }  
    135.    println("信息:",msg2)  
    136.   
    137.    val msg3 = statuses match {  
    138.    case List(404, 500) => "not found & error"  
    139.         case List(500, 404) => "error & not found"  
    140.         case List(200, 200) => "okay"  
    141.         case _ => "not sure what happened"  
    142.         }  
    143.   
    144.    println("信息:",msg3)  
    145.    val msg4 = statuses match {  
    146.     case List(500, x) => s"Error followed by $x"  
    147.         case List(e, x) => s"$e was followed by $x"  
    148.         }  
    149.   
    150.    println("信息:",msg4)  
    151.   
    152.    val head = List('r','g','b') match {  
    153.     case x :: xs => x  
    154.         case Nil => ' '  
    155.        }  
    156.   
    157.    println(head)  
    158.   
    159.   
    160.    val code = ('h', 204, true) match {  
    161.     case (_, _, false) => 501  
    162.         case ('c', _, true) => 302  
    163.         case ('h', x, true) => x  
    164.         case (c, x, true) => {  
    165.         println(s"Did not expect code $c")  
    166.         x  
    167.           }  
    168.         }  
    169.   
    170.      println(code)  
    171.  }  



    顺序输出结果如下: 


    Java代码  收藏代码
      1. (List(3, 5, 4),            ,11)  
      2. 红色  
      3. false  
      4. (red,红色)  
      5. (green,绿色)  
      6. List(3, 2, 4, 5)  
      7. List(33, 64)  
      8. List(1, 2, 3, 4)  
      9. (List(1, 2),List(3, 4, 5))  
      10. List(3, 2, 1)  
      11. List(3, 5, 7)  
      12. List(a, to, ab, apple)  
      13. List(apple, bag, bbc, one, to)  
      14. (List(2, 3, 5),List(7, 99, 45))  
      15. List(2, 3)  
      16. List((1,a), (2,b))  
      17. List(b, c, d)  
      18. true  
      19. List(1, 2, 3, 4)  
      20. List(1, 2, 2, 3)  
      21. List(1, 2)  
      22. List(1, 6, 5)  
      23. List(ok)  
      24. List(milk, tea)  
      25. 59  
      26. 4.23  
      27. 300  
      28. 42.0  
      29. true  
      30. true  
      31. true  
      32. true  
      33. =======================================  
      34. true  
      35. 23  
      36. 25  
      37. 15  
      38. 15  
      39. 15  
      40. 15  
      41. List(0, 4, 9, 15)  
      42. List(0, 4, 9, 15)  
      43. List(15, 11, 6, 0)  
      44. 24, 99, 104  
      45. ArrayBuffer(f, t)  
      46. List((a,1), (b,2))  
      47. Map(1 -> true, 3 -> true)  
      48. Set(2, 5, 3)  
      49. List(2, 5, 5, 3, 2)  
      50. List(1, 5, 3)  
      51. [1, 5, 3]  
      52. (信息:,whoah, an error)  
      53. (信息:,has error)  
      54. (信息:,error & not found)  
      55. (信息:,Error followed by 404)  
      56. r  
      57. 204  
      58.   
      59. Process finished with exit code 0  
  • 相关阅读:
    Using Apache Maven
    Getting Started(Google Cloud Storage Client Library)
    【iOS】PLA 3.3.12
    【Android】System.exit(0) 退出程序
    【iOS】Ineligible Devices || “无法下载应用程序”
    【iOS】No suitable application records found
    【Android】Failed to convert @drawable/picture into a drawable
    【SVN】eclipse 安装 SVN 插件
    【SVN】SVN Working copy is too old
    【Android】Android sdk content loader 0%
  • 原文地址:https://www.cnblogs.com/tonychai/p/4635146.html
Copyright © 2020-2023  润新知