文章目录

  • ​​用于添加和移除元素的操作符​​
  • ​​Iterable 特质的重要方法​​
  • ​​Seq特质的重要方法​​

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

  • 操作符:​​coll:+elem​​ 或 ​​elem+:coll​
  • 集合类型:​​Seq​
var coll = List(1,2,3)
val elem = 4
print(coll:+elem)
//运行结果
List(1, 2, 3, 4)
  • 操作符:​​coll+elem​​ 或 ​​coll+(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)
}