Scala集合笔记

原创 2015年07月09日 11:44:01

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

/** 
  * Scala 集合测试 
  */  
 def collectionTest(): Unit ={  

   val map =Map("red"->"红色","green"->"绿色")  
   val colors = List("red", "green", "blue")  
   //map函数测试 ,打印长度  
   val size=colors.map( (f:String) => f.size  );  
   val data=List(1,2,5,3);  
   //reduce函数测试 求和  
   val r=data.reduce((a:Int,b:Int)=>a+b);  
   println(size,"            ",r)  
    //打印取值  
    println(map("red"))  
   //判断是否存在  
   println(map.contains("white"))  
   //遍历map集合  
   for(pair<-map) println(pair)  

   //去重打印  
   println(List(3,2,3,4,5).distinct)  
   //fitler过滤  
   println(List(3,12,33,64,15).filter(_ > 18))  
   //扁平化处理  
   println(List(List(1, 2), List(3, 4)).flatten)  
   //partition 分区  
   println(List(1, 2, 3, 4, 5) partition (_ < 3))  
   //反转集合  
   println(List(1, 2, 3).reverse)  
   //slice==>与java的substring类似  
   println(List(2, 3, 5, 7) slice (1, 4))  
   //排序sortBy  
   println(List("apple", "to","a","ab") sortBy (_.size) )  
   //排序原生值  
   println(List("apple", "to","bag","bbc","one").sorted)  
   //splitAt值拆分一个list,根据下标的位置  
   println(List(2, 3, 5, 7,99,45) splitAt 3)  
   //提取第n个元素之前数据作为一个新的集合  
   println(List(2, 3, 5, 7, 11, 13) take 2)  
   //合并两个集合,进入一个大的集合  
   println(List(1, 2) zip List("a", "b") )  
   //删除前n个元素后,新生成一个集合  
   println(List('a', 'b', 'c', 'd') drop 1)  
   //判断两个集合是否相等  
   println(List(1, 2) == List(1, 2))  
   //合并两个集合 ++  
   println(List(1, 2) ++ Set(3, 4, 3) )  
   //合并两个集合  
   println(List(1, 2) ::: List(2, 3))  
   //添加一个元素  
   println(1 :: 2 :: Nil)  
   //添加一个元素  
   println(List(1,6).:+(5))  
   //遍历每一个元素,收集case匹配上的元素值,返回一个新的集合  
   println(List(0, 1, 0) collect {case 1 => "ok"})  
   //将一个元素,根据特定符号,拆分成单个元素组成的集合  
   println(List("milk,tea") flatMap (_.split(',')))  
   //最大值  
   println(List(41, 59, 26).max)  
   //最小值  
   println(List(10.9, 32.5, 4.23, 5.67).min)  
   //连乘  
   println(List(5, 6, 10).product)  
   //求和  
   println(List(11.3, 23.5, 7.2).sum )  
   //是否存在  
   println(List(34, 29, 18) contains 29 )  
   //是否以xxx结束  
   println(List(0, 4, 3) endsWith List(4, 3))  
   //是否以xxx开始  
   println(List(0, 4, 3) startsWith List(0) )  
   //最少有一个值小于18即为true  
   println(List(24, 17, 32) exists (_ < 18))  
   println("=======================================")  
   //必须得所有值小于18才返回true  
   println(List(5, 17, 2) forall (_ < 18) )  
   //求和  
   println(List(4, 5, 6).fold(8)(_ + _))  
   //求和  
   println(List(4, 5, 6).foldLeft(10)(_ + _))  
   //求和  
   println(List(4, 5, 6).foldRight(0)(_ + _) )  
   //求和  
   println(List(4, 5, 6).reduce(_ + _) )  
   //求和  
   println(List(4, 5, 6).reduceLeft(_ + _) )  
   //求和  
   println(List(4, 5, 6).reduceRight(_ + _) )  
   //阶段求和  
   println(List(4, 5, 6).scan(0)(_ + _))  
   //阶段求和  
   println(List(4, 5, 6).scanLeft(0)(_ + _))  
   //阶段求和  
   println(List(4, 5, 6).scanRight(0)(_ + _))  
   //集合转换字符串  
   println(List(24, 99, 104).mkString(", "))  
   //转成ArrayBuffer  
   println(List('f', 't').toBuffer)  
   //转Map to List  
   println(Map("a" -> 1, "b" -> 2).toList )  
   //转Set to Map  
   println(Set(1 -> true, 3 -> true).toMap)  
   //转List to Set  
   println(List(2, 5, 5, 3, 2).toSet)  
   //转List to String  
   println(List(2, 5, 5, 3, 2).toString)  

   //Java 与 Scala 集合互转  
   //导入包  
   import  collection.JavaConverters._  
   import  collection.JavaConversions._  
   import java.util.ArrayList;  
   // scala 转 java  
   val ja  =List(1,5,3).asJava  
   println(List(1,5,3))  
   println(ja)  
  // java 转 scala  
   val s =new java.util.ArrayList(3).asScala;  

   //集合的模式匹配  

   val statuses = List(500, 404)  

   val msg = statuses.head match {  
    case x if x < 500 => "okay"  
        case _ => "whoah, an error"  
        }  

   println("信息:",msg)  
   val msg2 = statuses match {  
    case x if x contains(500) => "has error"  
       case _ => "okay"  
        }  
   println("信息:",msg2)  

   val msg3 = statuses match {  
   case List(404, 500) => "not found & error"  
        case List(500, 404) => "error & not found"  
        case List(200, 200) => "okay"  
        case _ => "not sure what happened"  
        }  

   println("信息:",msg3)  
   val msg4 = statuses match {  
    case List(500, x) => s"Error followed by $x"  
        case List(e, x) => s"$e was followed by $x"  
        }  

   println("信息:",msg4)  

   val head = List('r','g','b') match {  
    case x :: xs => x  
        case Nil => ' '  
       }  

   println(head)  


   val code = ('h', 204, true) match {  
    case (_, _, false) => 501  
        case ('c', _, true) => 302  
        case ('h', x, true) => x  
        case (c, x, true) => {  
        println(s"Did not expect code $c")  
        x  
          }  
        }  

     println(code)  
 }  

输出结果如下:

(List(3, 5, 4),            ,11)  
红色  
false  
(red,红色)  
(green,绿色)  
List(3, 2, 4, 5)  
List(33, 64)  
List(1, 2, 3, 4)  
(List(1, 2),List(3, 4, 5))  
List(3, 2, 1)  
List(3, 5, 7)  
List(a, to, ab, apple)  
List(apple, bag, bbc, one, to)  
(List(2, 3, 5),List(7, 99, 45))  
List(2, 3)  
List((1,a), (2,b))  
List(b, c, d)  
true  
List(1, 2, 3, 4)  
List(1, 2, 2, 3)  
List(1, 2)  
List(1, 6, 5)  
List(ok)  
List(milk, tea)  
59  
4.23  
300  
42.0  
true  
true  
true  
true  
=======================================  
true  
23  
25  
15  
15  
15  
15  
List(0, 4, 9, 15)  
List(0, 4, 9, 15)  
List(15, 11, 6, 0)  
24, 99, 104  
ArrayBuffer(f, t)  
List((a,1), (b,2))  
Map(1 -> true, 3 -> true)  
Set(2, 5, 3)  
List(2, 5, 5, 3, 2)  
List(1, 5, 3)  
[1, 5, 3]  
(信息:,whoah, an error)  
(信息:,has error)  
(信息:,error & not found)  
(信息:,Error followed by 404)  
r  
204  

Process finished with exit code 0  

Scala 中 10 个超赞的集合操作函数

当我处理 Scala 集合时,我会进行两类操作:转换操作和聚合操作。第一种操作类型将集合转换为另一个集合,第二种操作类型返回某些类型的值。 本文我将集中介绍几个日常工作必备的 Scala 集合函...
  • hj7jay
  • hj7jay
  • 2017年01月06日 09:03
  • 2091

Scala深入浅出实战经典:36,List的partition、find、takeWhile、dropWhile、span、forall、exsists操作代码实战

Scala深入浅出实战经典:36,List的partition、find、takeWhile、dropWhile、span、forall、exsists操作代码实战...
  • sd637
  • sd637
  • 2015年09月19日 13:43
  • 1057

Scala 强大的集合数据操作示例

Scala是数据挖掘算法领域最有力的编程语言之一,语言本身是面向函数,这也符合了数据挖掘算法的常用场景:在原始数据集上应用一系列的变换,语言本身也对集合操作提供了众多强大的函数,本文将以List类型为...
  • pzw_0612
  • pzw_0612
  • 2015年05月23日 18:03
  • 66148

Scala数组操作

Scala数组操作: 1.定长数组 长度不变的数组的声明: //长度为10的整数数组,所有元素初始化为0 val numArr = new Array[Int](10) //长度为10的...
  • caiandyong
  • caiandyong
  • 2016年07月22日 10:30
  • 14689

[scala--基础]--String的操作

运行环境:jdk1.7、scala-2.10.4 package study /** * Document:本类作用---->测试字符串 * User: yangjf * Date: ...
  • high2011
  • high2011
  • 2016年08月14日 08:42
  • 4260

Scala 中Array,List,Tuple的区别

Scala 中Array,List,Tuple的区别
  • dai451954706
  • dai451954706
  • 2015年06月26日 11:01
  • 3924

scala List集合的用法

一、前言: 人们常说,Scala是一个难掌握的语言,一是其面向函数和面向对象结合的原因,二是其丰富的语法和内置函数。 对于Conllection 这一章的内容,更多的是利用内置函数灵活地运用,避免...
  • u010666884
  • u010666884
  • 2016年07月22日 17:23
  • 19124

Scala 强大的集合数据操作示例

Scala是数据挖掘算法领域最有力的编程语言之一,语言本身是面向函数,这也符合了数据挖掘算法的常用场景:在原始数据集上应用一系列的变换,语言本身也对集合操作提供了众多强大的函数,本文将以List类型为...
  • u013851082
  • u013851082
  • 2017年05月31日 13:55
  • 512

Scala 自学笔记 集合

Scala集合的主要特质 Iterator,用来访问集合中所有元素 val coll = ... // 某种Iterable val iter = col.iterator while(iter....
  • escaflone
  • escaflone
  • 2015年03月11日 17:15
  • 10920

Scala学习笔记8 - 集合

===集合       scala的集合(collection)库分为可变(mutable)类型与不可变(immutable)类型。以Set为例,特质scala.collection.immutabl...
  • guohecang
  • guohecang
  • 2016年08月04日 11:54
  • 434
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Scala集合笔记
举报原因:
原因补充:

(最多只允许输入30个字)