Scala的集合|数组

Java集合转换为Scala

import java.util.ArrayList
import scala.collection.JavaConverters._
val array = new ArrayList[Int]()
array.add(1)
array.add(2)
array.add(3)
array.add(4)

//使用Java API实现累加
val sum = array.stream().reduce(new BinaryOperator[Int] {
    override def apply(t: Int, u: Int): Int = {
        t + u
    }
}).get()
//通常引入JavaConverters之后,可以使用加强版本的集合操作
var total=array.asScala.sum

Array

  • Array在Scala中指的是数组,创建方式如下:
//分配大小为10,每个元素都分配了默认值
scala> var array=new Array[Int](10)
array: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
  • 修改元素
array(0)=1
array.update(1,2)
  • 去重 调用distinct

Range

创建的时候指定步长,相比较于Array,Range只读,不允许修改。

var range =  new Range(0,10,2)
var range = 0 to 10 by 2
var range = 0 until 10 by 2

Vector

按照下标顺序排列的向量,向量不支持修改

     var vec = Vector(0,10,1)
     
     var vector = for(i<-0 to 10 by 2 )yield i

Iterator

scala> var it=Iterator(1,2,3)
it: Iterator[Int] = non-empty iterator

scala> it.foreach(println)
1
2
3

scala> it.isEmpty
res41: Boolean = true

List
:: +: 追加元素

    var list = List(1,2,3)
    list::=10
    print(list) //结果为List(10, 1, 2, 3)
    var list = List(1,2,3)
    list+:=11
    print(list)  //结果为List(11, 1, 2, 3)

:::合并集合

    var list = List(1,2,3)
    var list2 = List(4,5,6)
    list:::=list2  ////在list元素之前追加prefix元素,生成新的集合
    println(list)  //结果为List(4, 5, 6, 1, 2, 3)

drop/dropRight

删除前n个元素,返回值为删除后的集合,原集合不变

在这里插入代码片    var list = List(1,2,3)
    var res = list.drop(2)
    println(res)
    println(list)
    //结果
    //List(3)
	//List(1, 2, 3)

slice

返回值为slice(x,y)原集合下标x到下标y的新集合,原集合不变

    var list = List(1,2,3,4,5)
    var res = list.slice(0,2)
    println(res)
    println(list)
//结果:
//List(1, 2)
//List(1, 2, 3, 4, 5)

reverse

颠倒集合元素顺序

scala> var list=List(1,2,3)
list: List[Int] = List(1, 2, 3)

scala> list.reverse
res105: List[Int] = List(3, 2, 1)

take/takeRight

    var list = List(1,2,3,4,5)
    var res = list.take(2)
    println(res)
    //结果:List(1, 2)

takeWhile

 var list = List(1,2,3,4,5)
    var res = list.takeWhile(x=>x<3)
    println(res)
    //结果:List(1, 2)

head/last/tail

scala> var list=List(1,2,3)
list: List[Int] = List(1, 2, 3)

scala> list.head
res111: Int = 1

scala> list.tail
res112: List[Int] = List(2, 3)

scala> list.last
res113: Int = 3

ListBuffer

update

scala> import scala.collection.mutable._
import scala.collection.mutable._

scala> var list=ListBuffer[Int]()
list: scala.collection.mutable.ListBuffer[Int] = ListBuffer()

scala> var list=ListBuffer(1,2,3)
list: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3)

scala> list.update(0,10)

scala> list
res1: scala.collection.mutable.ListBuffer[Int] = ListBuffer(10, 2, 3)

+= +=: ++= ++=:
+=集合末尾添加元素,+=:集合开始添加元素,++=追加集合在尾部,++=:在元素尾部添加元

scala>  var list=ListBuffer(1,2,3)
list: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3)

scala> list.+=(4)
res12: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3, 4)

scala> list.+=:(5)
res13: scala.collection.mutable.ListBuffer[Int] = ListBuffer(5, 1, 2, 3, 4)

scala> list.++=(List(6,7,8))
res14: scala.collection.mutable.ListBuffer[Int] = ListBuffer(5, 1, 2, 3, 4, 6, 7, 8)

删除 - | -=
区别-表示创建新的集合但是不包含删除的这个元素,-=表示删除集合指定元素,更新原始集合

    val listBuffer = ListBuffer[Int](1,2,3)
    val ints = listBuffer.-(1)
    println(ints)
    println(listBuffer)
    //结果:
    //ListBuffer(2, 3)
    //ListBuffer(1, 2, 3)
    val listBuffer = ListBuffer[Int](1,2,3)
    val ints = listBuffer.-=(1)
    println(ints)
    println(listBuffer)
    //结果为:
    //ListBuffer(2, 3)
    //ListBuffer(2, 3)

remove

删除指定位置元素

    val listBuffer = ListBuffer(1,2,3)
    listBuffer.remove(0)
    print(listBuffer)
    //结果:ListBuffer(2, 3)

insert/insertAll

在指定位置之前插入元素

scala> list
res27: scala.collection.mutable.ListBuffer[Int] = ListBuffer(2, 3)

scala> list.insert(0,4)

scala> list
res29: scala.collection.mutable.ListBuffer[Int] = ListBuffer(4, 2, 3)

scala> list.insertAll(2,List(1,2,3))

scala> list
res31: scala.collection.mutable.ListBuffer[Int] = ListBuffer(4, 2, 1, 2, 3, 3)

prependToList

将list1结果添加到list2中

    var list1 = List(1,2,3)
    var list2 = ListBuffer(5,5)
    list2.prependToList(list1)
    print(list2)
    //结果:ListBuffer(5, 5, 1, 2, 3)

Set(不可修改)

+ += - -=

+创建新的Set并添加元素,不修改原始set,+=修改原始set,类似-、-=就不在阐述

    var s = Set[Int](1,2,3,4)
    val ints = s.+(6)
    println(ints)
    println(s)
    //结果:
    //Set(1, 6, 2, 3, 4)
    //Set(1, 2, 3, 4)
    var s = Set[Int](1,2,3,4)
    val ints = s.+=(6)
    println(ints)
    println(s)
    //结果:
    //()
    //Set(1, 6, 2, 3, 4)

size

返回集合长度

Set(可修改)

添加删除 + =+ - -=

scala> var s=scala.collection.mutable.Set(1,2,3)
s: scala.collection.mutable.Set[Int] = Set(1, 2, 3)

scala> s.+(4)
res25: scala.collection.mutable.Set[Int] = Set(1, 2, 3, 4)

scala> s
res26: scala.collection.mutable.Set[Int] = Set(1, 2, 3)

scala> s.+=(4)
res27: scala.collection.mutable.Set[Int] = Set(1, 2, 3, 4)

scala> s
res28: scala.collection.mutable.Set[Int] = Set(1, 2, 3, 4)

scala> s.-(2)
res29: scala.collection.mutable.Set[Int] = Set(1, 3, 4)

scala> s
res30: scala.collection.mutable.Set[Int] = Set(1, 2, 3, 4)

scala> s.-=(2)
res31: scala.collection.mutable.Set[Int] = Set(1, 3, 4)

scala> s
res32: scala.collection.mutable.Set[Int] = Set(1, 3, 4)

remove/add

scala> var s=scala.collection.mutable.Set(1,2,3)
s: scala.collection.mutable.Set[Int] = Set(1, 2, 3)

scala>  s.remove(2)
res37: Boolean = true

scala>  s.remove(-1)
res38: Boolean = false

scala> s
res39: scala.collection.mutable.Set[Int] = Set(1, 3)

scala> s.add(4)
res41: Boolean = true

HashMap(不可变)

添加删除+ += - -=

scala> import scala.collection.immutable.HashMap
import scala.collection.immutable.HashMap

scala> var hm=HashMap[String,String](("建设","001"),("招商","002"))
hm: scala.collection.immutable.HashMap[String,String] = Map(建设 -> 001, 招商 -> 002)

scala> hm+="工商"->"003"

scala> hm.+=(("工商1","004"))

scala> hm
res4: scala.collection.immutable.HashMap[String,String] = Map(工商 -> 003, 建设 -> 001, 招商 -> 002, 工商1 -> 004)

scala> hm.-("工商")
res6: scala.collection.immutable.HashMap[String,String] = Map(建设 -> 001, 招商 -> 002, 工商1 -> 004)

scala> hm
res7: scala.collection.immutable.HashMap[String,String] = Map(工商 -> 003, 建设 -> 001, 招商 -> 002, 工商1 -> 004)

scala> hm.-=("工商")

scala> hm
res9: scala.collection.immutable.HashMap[String,String] = Map(建设 -> 001, 招商 -> 002, 工商1 -> 004)

get

scala> import scala.collection.immutable.HashMap
import scala.collection.immutable.HashMap

scala> var hm=HashMap[String,String](("建设","001"),("招商","002"))
hm: scala.collection.immutable.HashMap[String,String] = Map(建设 -> 001, 招商 -> 002)

scala> hm.get("招商").getOrElse("没有值")
res11: String = 002

scala> hm.get("招商1").getOrElse("没有值")
res12: String = 没有值

size

scala> hm
res16: scala.collection.immutable.HashMap[String,String] = Map(工商 -> 003, 建设 -> 001, 招商 -> 002, 工商1 -> 004)

scala> for(i<- hm) println(i._1+" -> "+i._2)
工商 -> 003
建设 -> 001
招商 -> 002
工商1 -> 004

merged

scala> var hm=HashMap[String,String](("建设","001"),("招商","002"))
hm: scala.collection.immutable.HashMap[String,String] = Map(建设 -> 001, 招商 -> 002)

scala> var newhm=HashMap[String,String](("邮政","004"))
newhm: scala.collection.immutable.HashMap[String,String] = Map(邮政 -> 004)

scala> var mergerFunction:((String,String),(String,String))=>(String,String) = (tuple1,tuple2)=>{
     |
     |    if(tuple1._1.equals(tuple2._1)){
     |       (tuple1._1,tuple2._2)
     |    }else{
     |      tuple1
     |    }
     |  }
scala> var res=hm.merged(newhm)(mergerFunction)
res: scala.collection.immutable.HashMap[String,String] = Map(邮政 -> 004, 建设 -> 001, 招商 -> 002)

scala> res
res18: scala.collection.immutable.HashMap[String,String] = Map(邮政 -> 004, 建设 -> 001, 招商 -> 002)

scala> for(i<- res) println(i)
(邮政,004)
(建设,001)
(招商,002)

key/values

scala> var hm=HashMap[String,String](("建设","001"),("招商","002"))
hm: scala.collection.immutable.HashMap[String,String] = Map(建设 -> 001, 招商 -> 002)

scala> hm.keys
res23: Iterable[String] = Set(建设, 招商)

scala> hm.values
res24: Iterable[String] = MapLike(001, 002)

HashMap(可变)

remove/put

scala> import scala.collection.mutable.HashMap
import scala.collection.mutable.HashMap

scala> var hm=HashMap[String,String](("建设","001"),("招商","002"))
hm: scala.collection.mutable.HashMap[String,String] = Map(建设 -> 001, 招商 -> 002
                                                          
scala> hm+="工商"->"003"
res0: scala.collection.mutable.HashMap[String,String] = Map(工商 -> 003, 建设 -> 001, 招商 -> 002)

scala> hm-=("工商")
res1: scala.collection.mutable.HashMap[String,String] = Map(建设 -> 001, 招商 -> 002)

scala> hm.put("邮政","004")
res2: Option[String] = None
 
scala> hm.remove("工商")
res3: Option[String] = None
 
scala> for(i<- hm) println(i)
(建设,001)
(邮政,004)
(招商,002)

你可能感兴趣的:(bigdata,大数据)