scala常用操作符和Iterable、Seq特质方法

用于添加和移除元素的操作符

  • 操作符:coll:+elemelem+:coll

  • 集合类型:Seq

    var coll = List(1,2,3)
    val elem = 4
    print(coll:+elem)
    //运行结果
    List(1, 2, 3, 4)
    
  • 操作符:coll+elemcoll+(e1,e2,...)

  • 集合类型:Set&Map

    var coll1 = Set(1, 3, 5)
    var elem1 = 2
    println(coll1+elem1)
    //运行结果
    Set(1, 3, 5, 2)
    
    var coll2 = Map("A"->1, "B"->2)
    var elem2 = ("C",3)//等同于("C"->3)
    println(coll2+elem2)
    //运行结果
    Map(A -> 1, B -> 2, C -> 3)
    
  • 操作符:coll-elem | coll-(e1,e2,...)

  • 集合类型:Set & Map & ArrayList

    var coll1 = Set(1, 3, 5)
    var elem1 = 3
    println(coll1-elem1)
    //运行结果
    Set(1, 5)
    
    var coll2 = Map("A"->1, "B"->2)
    var elem2 = "B"
    println(coll2-elem2)
    //运行结果
    Map(A -> 1)
    
  • 操作符:coll++coll2 | coll2++:coll

  • 集合类型:Iterable

    var coll = Set(1, 3, 5)
    var coll2 = Set(2, 4, 6)
    println(coll ++ coll2)
    //运行结果
    Set(5, 1, 6, 2, 3, 4)
    
  • 操作符:coll -- coll2

  • 集合类型:Set & Map & ArrayBuffer

    var coll = Set(1, 3, 5, 2, 4, 6)
    var coll2 = Set(2, 4, 6)
    println(coll -- coll2)
    //运行结果
    Set(5, 1, 3)
    
    var coll = Map("A"->1, "B"->2, "C"->3)
    var coll2 = List("A", "B")
    println(coll -- coll2)
    //运行结果
    Map(C -> 3)
    
  • 操作符:elem:lst | lst2:::lst

  • 集合类型:List

    var elem = List(1,2,3)
    var lst = List(4,5)
    println(elem :: lst)
    //运行结果
    List(List(1, 2, 3), 4, 5)
    
    var elem = List(1,2,3)
    var lst = List(4,5)
    println(elem ::: lst)
    //运行结果
    List(1, 2, 3, 4, 5)
    
  • 操作符 set|set2 | set&set2 | set&~set2

  • 描述:并集、交集和两个集的差异,|等同于++,&~等同于–

  • 集合类型 Set

    var coll = Set(1, 3, 5, 2)
    var coll2 = Set(2, 4, 6)
    println(coll | coll2)
    println(coll & coll2)
    println(coll &~ coll2)
    //运行结果
    Set(5, 1, 6, 2, 3, 4)
    Set(2)
    Set(1, 3, 5)
    
  • 操作符:coll +=elem | coll += (e1,e2,...) | coll ++= coll2 | coll -= elem | coll -= (e1,e2,...) | coll --=coll2

  • 描述:通过添加或一出给定元素来修改coll

  • 集合类型:可变集合

    var coll = Set(1, 3, 5, 2)
    var elem = 7
    var coll2 = Set(2, 4, 6)
    coll += elem
    println(coll)
    coll ++= coll2
    println(coll)
    coll --= coll2
    println(coll)
    //运行结果
    Set(5, 1, 2, 7, 3)
    Set(5, 1, 6, 2, 7, 3, 4)
    Set(5, 1, 7, 3)
    
  • 操作符:elem +=: coll | coll2 ++=: coll

  • 描述:通过向前追加给定元素或集合来修改coll

  • 集合类型:ArrayList

    var coll = ArrayBuffer("you", "Tom")
    var elem = "are"
    var coll2 = ArrayBuffer("How")
    elem +=: coll
    println(coll)
    coll2 ++=: coll
    println(coll)
    //运行结果
    ArrayBuffer(are, you, Tom)
    ArrayBuffer(How, are, you, Tom)
    

Iterable 特质的重要方法

  • 方法:head & last & headOption & lastOption

  • 描述:返回第一或最后一个元素;或者以Option返回

    var coll = Map("A"->1, "B"->2, "C"->3)
    println("head:"+coll.head)
    println("last"+coll.last)
    println("headOption"+coll.headOption)
    println("lastOption"+coll.lastOption)
    //运行结果
    head:(A,1)
    last(C,3)
    headOptionSome((A,1))
    lastOptionSome((C,3))
    
  • 方法:tail & isEmpty

  • 描述:返回除第一个或最后一个元素外其余的部分

    var coll = Map("A"->1, "B"->2, "C"->3)
    println("tail:"+coll.tail)
    println("init:"+coll.init)
    //运行结果
    tail:Map(B -> 2, C -> 3)
    init:Map(A -> 1, B -> 2)
    
  • 方法:size& isEmpty

  • 描述:返回集合长度;或者,当前长度为零时返回True

    var coll = Set(1, 3, 5, 2)
    println("size:"+coll.size)
    println("isEmpty:"+coll.isEmpty)
    //运算结果
    length:4
    isEmpty:false
    
  • 方法:map(f) | foreach(f) | flatMap(f) | collect(pf)

  • 描述:将函数应用到所有元素

    
    
  • 方法:sum | product | max | min

  • 描述:和,乘积,最大值,最小值

    var coll = Set(1, 3, 5, 2)
    println("sum:"+coll.sum)
    println("product:"+coll.product)
    println("max:"+coll.max)
    println("min:"+coll.min)
    //运行结果
    sum:11
    product:30
    max:5
    min:1
    
  • 方法:count(pred) | forall(pred) | exists(pred)

  • 描述:返回满足时提前表达式的元素计数,所有元素满足时返回true,至少一个元素满足是返回true

    var coll = Set(1, 3, 5, 2)
    println("count:"+coll.count(_>3))
    println("forall:"+coll.forall(_>3))
    println("exists:"+coll.exists(_>3))
    //运行结果
    count:1
    forall:false
    exists:true
    
  • 方法:filter(pred) | filterNot(pred) | partition(pred)

  • 描述:返回所有满足前提表达式的元素,所有不满足的元素,两组元素组成的对偶

    var coll = Set(1, 3, 5, 2)
    println("filter:"+coll.filter(_>3))
    println("filterNot:"+coll.filterNot(_>3))
    println("exists:"+coll.partition(_>3))
    //运行结果
    filter:Set(5)
    filterNot:Set(1, 3, 2)
    exists:(Set(5),Set(1, 3, 2))
    
  • 方法:takeWhile(pred) | dropWhile(pred) | span(pred)

  • 描述:返回满足前提表达式的一组元素,所有其他元素,两组元素的对偶

    var coll = Set(1, 2, 3, 4)
    println("takeWhile:"+coll.takeWhile(_<3))
    println("dropWhile:"+coll.dropWhile(_<2))
    println("span:"+coll.span(_<2))
    //运行结果
    takeWhile:Set(1, 2)
    dropWhile:Set(2, 3, 4)
    span:(Set(1),Set(2, 3, 4))
    
  • 方法:take(n) | drop(n) | splitAt()

  • 描述:返回前n个元素,其他元素,两组对偶

    var coll = Set(1, 2, 3, 4)
    println("take:"+coll.take(2))
    println("drop:"+coll.drop(2))
    println("splitAt:"+coll.splitAt(2))
    //运行结果
    take:Set(1, 2)
    drop:Set(3, 4)
    splitAt:(Set(1, 2),Set(3, 4))
    
  • 方法:takeRight(n) | dropRight(n)

  • 描述:返回最后n个元素,其他元素

    var coll = Set(1, 2, 3, 4)
    println("takeRight:"+coll.takeRight(2))
    println("dropRight:"+coll.dropRight(2))
    //运行结果
    takeRight:Set(3, 4)
    dropRight:Set(1, 2)
    
  • 方法:slice(from, to)

  • 描述:返回位于从from开始到to结束这个区间内的所以元素

    var coll = Set(1, 2, 3, 4)
    println("slice:"+coll.slice(0,2))
    //返回结果
    slice:Set(1, 2)
    
  • 方法:zip(coll2) | zipAll(coll2,fill,fill2) | zipWithIndex

  • 描述:返回由本集合元素和另外一个集合的元素组成的对偶

    var coll = List("a", "b", "c")
    var coll2 = List(1, 2, 3)
    var coll3 = List("a", "b", "c")
    var coll4 = List(1, 2)
    var coll5 = List("a", "b", "c", "d")
    println(coll.zip(coll2))
    println(coll3.zipAll(coll4, "a", 0))
    println(coll5.zipWithIndex)
    //运行结果
    List((a,1), (b,2), (c,3))
    List((a,1), (b,2), (c,0))
    List((a,0), (b,1), (c,2), (d,3))
    
  • 方法:grouped(n)、sliding(n)

  • 描述:返回长度为n的子集合迭代器grouped产出下标为0 until n的元素,然后是下标为n until 2*n的元素,以此类推;silding产出的下标为0 until n的元素,然后是下标为1 until n+1的元素,以此类推

    
    
  • 方法:mkString(before,between,after)、addString(sb, before, between, after)

  • 描述:做出一个由所有元素组成的字符串,将给定字符串分别添加到首个元素之前,每个元素之间,以及最后一个元素之后。第二个方法将该字符串追加到字符串构造器当中

    var coll = List("a", "b", "c")
    println(coll.mkString("<","-",">"))
    var coll2 = new StringBuilder()
    coll2.append("d","e")
    println(coll.addString(coll2, "<", "-", ">"))
    //运行结果
    <a-b-c>
    (d,e)<a-b-c>
    

Seq特质的重要方法

  • 方法:contains(elem)containsSlice(seq)startsWith(seq)endsWith(seq)

  • 描述:返回true,如果该序列:包含给元素;包含给定序列;以给定序列开始;或者,以给定序列结束

val list = List(1,23,4)
val list2 = List(1,23)
val list3 = List(23,4)
println(list.contains(2))
println(list.containsSlice(list2))
println(list.startsWith(list2))
println(list.endsWith(list3))
结果
false
true
true
true
  • 方法:indexOf(elem)lastIndexOf(elem)indexOfSlice(seq)lastIndexOfSlice(seq)

  • 描述:返回给定元素或序列在当前序列中的首次或末次出现的下标

val list = List(1,23,4,5,6,7,8,1,23)
val list2 = List(1,23)
println(list.indexOf(23))
println(list.lastIndexOf(23))
println(list.indexOfSlice(list2))
println(list.lastIndexOfSlice(list2))
结果
1
8
0
7
  • 方法:indexWhere(pred)

  • 描述:满足返回pred的首个元素下标

val list = List(1,3,4,23,4,5,6,7,8,1,23)
println(list.indexWhere(_>20))
结果
3
  • 方法:prefixLength(pred)、segmentLenght(pred,n)

  • 描述:返回满足pred的最长元素序列的长度,从当前序列的下标0或n开始查找

val list = List(1,3,4,23,4,5,6,7,8,23)
println(list.prefixLength(_>4))
println(list.segmentLength(_>3,2))
结果
0
8
  • 方法:padTo(n,fill)

  • 描述:返回当前序列的一个拷贝,将fill的内容向后追加,直到新序列长度达到n

val list2 = List(8,9)
val list = List(1,3,4,23,4,5)
println(list.padTo(5,list2))
结果
List(1, 3, 4, 23, 4, 5)
  • 方法:intersect(seq)、diff(seq)

  • 描述:返回“多重集合”的交集,或序列之间的差异。

val list2 = List(8,1,23,9)
val list = List(1,3,4,23,4,5)
println(list.intersect(list2))
println(list.diff(list2))
结果
List(1, 23)
List(3, 4, 4, 5)
  • 方法:reverse

  • 描述:当前序列的反向

val list = List(1,3,4,23,4,5)
println(list.reverse)
结果
List(5, 4, 23, 4, 3, 1)
  • 方法:permutations、combinations(n)

  • 描述:返回一个遍历所有排列或组合(长度为n的子序列)的迭代器

val list2 = List(8, 1, 23, 9)
val list = List(1, 3, 4, 23, 4, 5)
for (elem <- list.permutations) {
    print(elem)
}
println()
for (elem <- list.combinations(3)) {
    print(elem)
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值