Scala函数大全

本文详细介绍了Scala中数组的各种操作,包括合并、连接、排列组合、过滤、映射、聚合等,以及如何使用函数式编程方法对数组进行处理。重点讲解了`++`、`fold`、`groupBy`、`collect`、`flatMap`等函数的用法,展示了它们在处理序列数据时的强大功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

++

++:

 +:/:+

 /: :\

addString

aggregate

 apply

charAt 

 clone

collect  PartialFunction

collectFirst

combinations

contains

containsSlice

copyToArray 拷贝数组

 copyToBuffer

corresponds

 count

diff

 distinct

drop

dropRight

dropWhile

 endsWith

exists

filter

filterNot

find

flatMap

flatten

fold / foldLeft / foldRight

forall

groupBy / foreach

grouped

hasDefiniteSize/hashCode

head

headOption

indexOf

indexOfSlice

indexWhere

indices

init

inits

 intersect

isDefinedAt

 isEmpty

isTraversableAgain

iterator

last

lastIndexOf

lastIndexOfSlice

lastIndexWhere

lastOption

length

 lengthCompare

map

max

maxBy / minBy

mkString

nonEmpty

padTo

par

 partition

 patch

permutations

 prefixLength

product

 reduce

reverse

reverseIterator

reverseMap

sameElements

scan

segmentLength

seq

size

sliding

sortBy

sorted

span

splitAt

 startsWith

stringPrefix

subSequence

sum

tail

take

takeRight

takeWhile

 toArray

toBufffer

 toIndexedSeq

 tolterable

transpose

union

unzip

unzip3

update

view

withFilter

zip

zipAll

zipWithIndex


++

合并集合,并返回一个新的数组

scala> var  a=Array(1,2,3)
a: Array[Int] = Array(1, 2, 3)

scala> var b=Array('a','b','c')
b: Array[Char] = Array(a, b, c)

scala> a++b
res197: Array[AnyVal] = Array(1, 2, 3, a, b, c)

++:

并数组,结果由冒号右边类型决定

scala> var a=Array(1,2,3)
a: Array[Int] = Array(1, 2, 3)

scala> var b=List(4,5,6)
b: List[Int] = List(4, 5, 6)

scala> a++:b
res5: List[Int] = List(1, 2, 3, 4, 5, 6)

scala> b++:a
res6: Array[Int] = Array(4, 5, 6, 1, 2, 3)

*******************************************************
scala> var  a=Array(1,2,3)
a: Array[Int] = Array(1, 2, 3)
scala> var b=Array('a','b','c')
b: Array[Char] = Array(a, b, c)
scala> a++:b
res198: Array[AnyVal] = Array(1, 2, 3, a, b, c)

scala> b++:a
res199: Array[AnyVal] = Array(a, b, c, 1, 2, 3)

 +:/:+

冒号跟着集合,在数组前或后加值

scala> var  a=Array(1,2,3)
a: Array[Int] = Array(1, 2, 3)
scala> a:+4
res201: Array[Int] = Array(1, 2, 3, 4)

scala> 4+:a
res202: Array[Int] = Array(4, 1, 2, 3)


 /: :\

左子树加,右子树加

scala> var  a=Array(1,2,3)
scala> (10 /: a)((x,y)=>{println(x,y);x+y})
(10,1)
(11,2)
(13,3)
res218: Int = 16

scala> (a :\ 10)((x,y)=>{println(x,y);x+y})
(3,10)
(2,13)
(1,15)
res219: Int = 16

addString

将数组中的元素逐个添加到StringBuilder中

scala> var  a=Array(1,2,3)
scala> var c=new StringBuilder()
c: StringBuilder =

scala> a.addString(c)
res224: StringBuilder = 123

scala> var d=new StringBuilder()
d: StringBuilder =

scala> a.addString(d,"-")
res225: StringBuilder = 1-2-3

scala> var f=new StringBuilder()
f: StringBuilder =

scala> a.addString(f,"(","-",")")
res226: StringBuilder = (1-2-3)

aggregate

聚合计算,是柯理化方法,参数是两个方法

scala> var a=Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14)
a: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
不分区计算,串型计算
scala> a.aggregate(1)((x,y)=>x+y,(x,y)=>x+y)
res228: Int = 106
scala> a.aggregate(1)((x,y)=>x+y,(x,y)=>x+y)
res229: Int = 106

并行
scala> a.par.aggregate(10,0)((x,y)=>{if (y>10) (x._1,x._2+1) else x },(x,y)=>(x._1,x._2+y._2))
res236: (Int, Int) = (10,4)

 apply

取下标对应的值,必须为Int类型

scala> var a=Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14)
scala> a.apply(1)
res238: Int = 2

scala> a.apply(0)
res239: Int = 1

charAt 

charAt(index:Int)和apply功能类似

scala> var b=Array('a','b','c')
b: Array[Char] = Array(a, b, c)

scala> b
res242: Array[Char] = Array(a, b, c)

scala> b.charAt(1)
res243: Char = b

 clone

创建一个副本(默认为浅拷贝,即拷贝对象的引用,拷贝中数据改变原值也会改变)

scala> var b=Array('a','b','c')
b: Array[Char] = Array(a, b, c)
scala> var c=b.clone()
c: Array[Char] = Array(a, b, c)
scala> c
res245: Array[Char] = Array(a, b, c)

collect  PartialFunction

collect 通过执行一个并行计算(偏函数),得到一个新对象
PartialFunction(入参,出参) 即只处理指定数据

scala> var a=Array(1,2,3,4,5,6)
a: Array[Int] = Array(1, 2, 3, 4, 5, 6)
scala> def fun:PartialFunction[Int,Int]={
     | case 2=>4
     | case 3=>5
     | case 4=>6
     | case x=>x}
scala> a.collect(fun)
res251: Array[Int] = Array(1, 4, 5, 6, 5, 6)

scala> c
res245: Array[Char] = Array(a, b, c)
scala> c.collect(x=>x match {case 'a' =>"A"  case _=>"demo"})
res249: Array[String] = Array(A, demo, demo)


collectFirst

在序列中查找第一个符号偏函数定义的元素,并执行偏函数计算

scala> def fun:PartialFunction[Any,Int]={case x:Int=>x*10}
fun: PartialFunction[Any,Int]

scala> var a=Array(1,'a',"a")
a: Array[Any] = Array(1, a, a)

scala> a.collectFirst(fun)
res252: Option[Int] = Some(10)

scala> res252.getOrElse(-1)
res253: Int = 10

combinations

排列组合

scala> var a=Array(1,2,3,4)
a: Array[Int] = Array(1, 2, 3, 4)
scala> a.combinations(2)
res258: Iterator[Array[Int]] = non-empty iterator

scala> res258.foreach(x=>println(x.mkString(",")))
1,2
1,3
1,4
2,3
2,4
3,4

contains

序列中是否包含指定对象

scala> a
res262: Array[Int] = Array(1, 2, 3, 4)

scala> a.contains(1)
res263: Boolean = true

containsSlice

类型,值,顺序都要匹配,不比较长度

scala> a
res264: Array[Int] = Array(1, 2, 3, 4)
scala> var b=Array(1,2)
b: Array[Int] = Array(1, 2)

scala> a.containsSlice(b)
res266: Boolean = true

scala> var b=Array(2,1)
b: Array[Int] = Array(2, 1)

scala> a.containsSlice(b)
res267: Boolean = false

copyToArray 拷贝数组

– copyToArray(xs: Array[A], start: Int): Unit 拷贝数组,加存放拷贝目标的初始位置
– copyToArray(xs: Array[A], start: Int, len: Int): Unit 拷贝数组,加拷贝目标的初始位置,以及拷贝长度
 

scala> var a=Array(1,2,3,4)
a: Array[Int] = Array(1, 2, 3, 4)

scala> var b=new Array[Int](9)
b: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0)

scala> a.copyToArray(b)

scala> b
res270: Array[Int] = Array(1, 2, 3, 4, 0, 0, 0, 0, 0)

scala> var b=new Array[Int](9)
b: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0)

scala> a.copyToArray(b,4)

scala> b
res274: Array[Int] = Array(0, 0, 0, 0, 1, 2, 3, 4, 0)

scala> var b=new Array[Int](9)
b: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0)

scala> a.copyToArray(b,4,3)

scala> b
res276: Array[Int] = Array(0, 0, 0, 0, 1, 2, 3, 0,0)

 copyToBuffer

将数组中的内容拷贝到Buffer中(a拷贝到b中)

scala> import scala.collection.mutable.ArrayBuffer
import scala.collection.mutable.ArrayBuffer

scala> var a=Array('a','b','c')
a: Array[Char] = Array(a, b, c)

scala> var b:ArrayBuffer[Char]=ArrayBuffer()
b: scala.collection.mutable.ArrayBuffer[Char] = ArrayBuffer()

scala> a.copyToBuffer(b)

scala> b
res278: scala.collection.mutable.ArrayBuffer[Char] = ArrayBuffer(a, b, c)

corresponds

判断两个序列长度+对应位置元素是否符合某个条件(两者全部满足,返回true)

cala> var a=Array(1,2,3)
a: Array[Int] = Array(1, 2, 3)

scala> var b=Array(2,4,5,6)
b: Array[Int] = Array(2, 4, 5, 6)

scala> a.corresponds(b)(_<_)
res279: Boolean = false

 count

统计符合条件的元素

scala> a
res281: Array[Int] = Array(1, 2, 3)
scala> a.count(_>2)
res282: Int = 1

diff

计算当前数组与另一个数组内容不同的值

scala> a
res283: Array[Int] = Array(1, 2, 3)

scala> var b=Array(1,2,3,4,5)
b: Array[Int] = Array(1, 2, 3, 4, 5)

scala> a.diff(b)
res284: Array[Int] = Array()

scala> b.diff(a)
res285: Array[Int] = Array(4, 5)

 distinct

去除当前重复的元素,只保留一个

scala> var b=Array(1,1,2,3,4,4,4,5,6,6,7,7)
b: Array[Int] = Array(1, 1, 2, 3, 4, 4, 4, 5, 6, 6, 7, 7)
scala> b.distinct
res287: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7)

drop

去除当前序列前n个元素

scala> b
res289: Array[Int] = Array(1, 1, 2, 3, 4, 4, 4, 5, 6, 6, 7, 7)

scala> b.drop(2)
res290: Array[Int] = Array(2, 3, 4, 4, 4, 5, 6, 6, 7, 7)

scala> b
res291: Array[Int] = Array(1, 1, 2, 3, 4, 4, 4, 5, 6, 6, 7, 7)

scala> b.drop(5)
res292: Array[Int] = Array(4, 4, 5, 6, 6, 7, 7)

dropRight

去除尾部n个元素

scala> b
res295: Array[Int] = Array(1, 1, 2, 3, 4, 4, 4, 5, 6, 6, 7, 7)

scala> b.dropRight(5)
res296: Array[Int] = Array(1, 1, 2, 3, 4, 4, 4)

dropWhile

去除当前数组中符合条件的元素(碰到第一个不满足条件的元素结束)

scala> var b=Array(4,5,6,1,2,3,1,2,3)
b: Array[Int] = Array(4, 5, 6, 1, 2, 3, 1, 2, 3)

scala> b.dropWhile(_>3)
res299: Array[Int] = Array(1, 2, 3, 1, 2, 3)

 endsWith

判断是否以某个序列结尾 (序列)

scala> a
res300: Array[Int] = Array(1, 2, 3)

scala> b
res301: Array[Int] = Array(4, 5, 6, 1, 2, 3, 1, 2, 3)
scala> b.endsWith(a)
res303: Boolean = true

exists

判断当前数组是否包含符合条件的元素

scala> b
res306: Array[Int] = Array(4, 5, 6, 1, 2, 3, 1, 2, 3)
scala> b.exists(_>3)
res308: Boolean = true

filter

取得数组中符合条件的元素

 scala> a
res309: Array[Int] = Array(1, 2, 3)

scala> a.filter(_>2)
res310: Array[Int] = Array(3)

filterNot

与filter相反 filter 取得数组中符合条件的元素    

scala> a
res319: Array[Int] = Array(1, 2, 3)

scala> a.filter(_>2)
res320: Array[Int] = Array(3)
scala> a.filterNot(_>2)
res321: Array[Int] = Array(1, 2)

find

查找第一个符合条件的元素

scala> b
res322: Array[Int] = Array(4, 5, 6, 1, 2, 3, 1, 2, 3)

scala> b.find(_>3)
res323: Option[Int] = Some(4)
scala> res323.getOrElse(-1)
res325: Int = 4

flatMap

对当前序列的每一个元素进行操作

scala> a
res326: Array[Int] = Array(1, 2, 3)

scala> a.flatMap(x=>1 to x)
res327: Array[Int] = Array(1, 1, 2, 1, 2, 3)

flatten

降维 每运行一次降一个维度

scala> var a=Array(Array(1,2),Array(3,4))
a: Array[Array[Int]] = Array(Array(1, 2), Array(3, 4))

scala> a.flatten
res328: Array[Int] = Array(1, 2, 3, 4)

scala> var a=Array(Array(Array(1,2),Array(3,4)),Array(Array(5,6),Array(7,8)))
a: Array[Array[Array[Int]]] = Array(Array(Array(1, 2), Array(3, 4)), Array(Array(5, 6), Array(7, 8)))

scala> a.flatten
res329: Array[Array[Int]] = Array(Array(1, 2), Array(3, 4), Array(5, 6), Array(7, 8))

scala> res329.flatten
res330: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8)

fold / foldLeft / foldRight

对序列中每个元素进行二元运算(需要一个方法) aggregate有类似的语义,aggregate需要两个方法

scala> val a=Array(1,2,3)
a: Array[Int] = Array(1, 2, 3)
scala> a.fold(1)(_+_)
res334: Int = 7

scala> a.foldRight(1)((x,y)=>{println(x,y);x+y})
(3,1)
(2,4)
(1,6)
res336: Int = 7

scala> a.foldLeft(1)((x,y)=>{println(x,y);x+y})
(1,1)
(2,2)
(4,3)
res337: Int = 7

forall

检测序列中的元素是否都满足条件p,如果序列为空,也返回true

scala> a
res340: Array[Int] = Array(1, 2, 3)
scala> a.forall(_>0)
res342: Boolean = true

groupBy / foreach

 foreach 遍历序列中的元素,无返回值
groupBy 按条件分组,同条件放一组

scala> a.groupBy(x=>x match{ case x if x==2 =>"Two" case x if x==3 =>"Three" case _=>"
one"})
res0: scala.collection.immutable.Map[String,Array[Int]] = Map(one -> Array(1, 4), Two -> Array(2), Three -> Array(3))

scala> res0.foreach(x=>println(x._1,x._2.toList))
(one,List(1, 4))
(Two,List(2))
(Three,List(3))

scala> a.groupBy(_>2).toList.apply(1)
res136: (Boolean, Array[Int]) = (true,Array(3, 4))

scala> a.groupBy(_>2).toList.apply(1)._2
res137: Array[Int] = Array(3, 4)

scala> a.groupBy(_>2).toList.apply(1)._2(1)
res138: Int = 4

grouped

按指定数分组   区别:combinations 排列组合量

scala> a
res6: Array[Int] = Array(1, 2, 3, 4)
scala> a.grouped(2).foreach(x=>println(x.mkString(",")))
1,2
3,4

scala> a.combinations(2).foreach(x=>println(x.mkString(",")))
1,2
1,3
1,4
2,3
2,4
3,4

hasDefiniteSize/hashCode

hasDefiniteSize 检测序列长度是否有限
hashCode hash值

scala> a
res18: Array[Int] = Array(1, 2, 3, 4)
scala> a.hasDefiniteSize
res20: Boolean = true

scala> a.hashCode
res22: Int = 1364415236

返回序列的第一个元素

scala> a
res24: Array[Int] = Array(1, 2, 3, 4)
scala> a.head
res23: Int = 1

headOption

返回Option类型对象(none/some)

scala> a
res24: Array[Int] = Array(1, 2, 3, 4)
scala> a.headOption
res26: Option[Int] = Some(1)

scala> var b:Array[Int]=Array()
b: Array[Int] = Array()

scala> b.headOption
res31: Option[Int] = None

indexOf

返回元素的索引值

scala> a
res33: Array[Int] = Array(1, 2, 3, 4)

scala> a.indexOf(1)
res34: Int = 0

scala> a.indexOf(2)
res35: Int = 1

indexOfSlice

检测当前序列是否包含另一个序列,并返回第一个匹配出现的元素的索引

scala> a
res36: Array[Int] = Array(1, 2, 3, 4)

scala> var b=Array(1,2)
b: Array[Int] = Array(1, 2)

scala> a.indexOfSlice(b)
res37: Int = 0

scala> var a=Array(1,2,3,4,5,1,2,3)
a: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)

scala> a.indexOfSlice(b)
res38: Int = 0

scala> a.indexOfSlice(b,2)
res39: Int = 5

indexWhere

返回当前序列中第一个满足条件的元素的索引

scala> a
res40: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)

scala> a.indexWhere(_>2)
res41: Int = 2

scala> a.indexWhere(_>2,4)
res42: Int = 4

scala> a.indexWhere(_>2,6)
res43: Int = 7

indices

返回当前序列索引集合

scala> a
res40: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3
scala> a.indices
res44: scala.collection.immutable.Range = Range(0, 1, 2, 3, 4, 5, 6, 7)

init

返回当前序列中不包含最后一个元素的序列

scala> a
res45: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)

scala> a.init
res46: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2)

scala> a.init.mkString("-")
res47: String = 1-2-3-4-5-1-2

inits

对集合中元素进行init操作,逐层减一,直至为空

scala> a
res45: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)
 scala> a.inits.foreach(x=>println(x.mkString(",")))
1,2,3,4,5,1,2,3
1,2,3,4,5,1,2
1,2,3,4,5,1
1,2,3,4,5
1,2,3,4
1,2,3
1,2
1
  --前面有值,为空

 intersect

去两个集合的交集 

 scala> a
res50: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)

scala> b
res51: Array[Int] = Array(1, 2)

scala> a.intersect(b)
res52: Array[Int] = Array(1, 2)

isDefinedAt

判断序列中是否存在指定索引

scala> a
res53: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)

scala> a.isDefinedAt(2)
res54: Boolean = true

scala> a.isDefinedAt(8)
res55: Boolean = false

 isEmpty

判断当前序列是否为空

 scala> a
res56: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)

scala> a.isEmpty
res57: Boolean = false

isTraversableAgain

判断序列是否可以反复遍历 iterators返回false

 scala> a
res56: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)
scala> a.isTraversableAgain
res60: Boolean = true

scala> a.iterator.isTraversableAgain
res61: Boolean = false

iterator

对序列中每一个元素产生一个iterator

 scala> a
res56: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)
scala> a.iterator
res63: Iterator[Int] = non-empty iterator

last

返回序列中最后一个元素

scala> a
res65: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)

scala> a.last
res66: Int = 3

lastIndexOf

取得序列中最后一个等于 elem 的元素的位置,指定在 end 之前(包括)

 scala> a
res65: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)

scala> a.last
res66: Int = 3

scala> a.lastIndexOf(3,5)
res67: Int = 2

scala> a.lastIndexOf(3,9)
res68: Int = 7

lastIndexOfSlice

判断当前序列中是否包含序列 that,并返回最后一次出现该序列的位置处的索引

scala> a
res69: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)

scala> b
res70: Array[Int] = Array(1, 2)

scala> a.lastIndexOfSlice(b)
res71: Int = 5

scala> a.lastIndexOfSlice(b,4)
res72: Int = 0

lastIndexWhere

返回当前序列最后一个满足条件的元素的索引,可以指定在 end 之前(包括)的元素中查找

scala> a
res69: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)
scala> a.lastIndexWhere(_<3)
res75: Int = 6

scala> a.lastIndexWhere(_<3,4)
res76: Int = 1

lastOption

返回当前序列中最后一个对象

scala> a
res69: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)
scala> a.lastOption
res78: Option[Int] = Some(3)

length

返回当前序列中元素个数 size

scala> a
res80: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)

scala> a.length
res81: Int = 8

 lengthCompare

比较序列真实长度和参数len

scala> a
res82: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)

scala> a.lengthCompare(3)
res83: Int = 5

map

对序列中元素进行f操作

scala> a
res84: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)

scala> a.map(_+10)
res85: Array[Int] = Array(11, 12, 13, 14, 15, 11, 12, 13)

max

返回序列中最大的元素

scala> a
res86: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)

scala> a.max
res87: Int = 5

maxBy / minBy

maxBy 返回序列中第一个符合条件的元素
minBy 返回序列中第一个不符合条件的元素

scala> a
res86: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)

scala> a.max
res87: Int = 5

scala> a.maxBy(_>5)
res88: Int = 1

scala> a.minBy(_>4)
res89: Int = 1

scala> a.maxBy(_>4)
res90: Int = 5

mkString

将所有元素组成一个字符串

scala> a
res93: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)

scala> a.mkString("(","-",")")
res94: String = (1-2-3-4-5-1-2-3)

nonEmpty

判断序列不是空

scala> a
res93: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)
scala> a.nonEmpty
res96: Boolean = true

padTo

后补齐,如果当前序列长度小于len,则用elem元素补齐至len长度

scala> a
res93: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)
scala> a.padTo(8,-1)
res97: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)

scala> a.padTo(10,-1)
res98: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3, -1, -1)

par

返回一个并行实现,产生的并行序列,不能被修改

scala> a
res93: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)
scala> a.par
res99: scala.collection.parallel.mutable.ParArray[Int] = ParArray(1, 2, 3, 4, 5, 1, 2, 3)

 partition

按条件将序列拆成两个新的序列,满足条件的放到第一个序列中,
– 其余的放到第二个序列,下面以序列元素是否是 2 的倍数来拆分

scala> a
res102: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)

scala> a.partition(_%2==0)
res103: (Array[Int], Array[Int]) = (Array(2, 4, 2),Array(1, 3, 5, 1, 3))

scala> a.partition(_>=2)
res113: (Array[Int], Array[Int]) = (Array(2, 3, 4, 5, 2, 3),Array(1, 1))

 patch

批量替换,从from开始,+替换内容+ 替换replaced个元素
把从一个值开始一定长度的内容,替换成你所需要的内容

scala> a
res118: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)

scala> a.patch(1,Array(-1,-1),2)
res119: Array[Int] = Array(1, -1, -1, 4, 5, 1, 2, 3)

scala> a.patch(1,Array(-1,-1),3)
res120: Array[Int] = Array(1, -1, -1, 5, 1, 2, 3)

scala> a.patch(1,Array(-1,-1),4)
res121: Array[Int] = Array(1, -1, -1, 1, 2, 3)

scala> a.patch(1,Array(-1,-1),5)
res122: Array[Int] = Array(1, -1, -1, 2, 3)

permutations

排列组合(combinations),combinations相当有个去重,相同元素的数组认作同一个

scala> var b=Array(1,2,3)
b: Array[Int] = Array(1, 2, 3)
scala> b.combinations(2)
res127: Iterator[Array[Int]] = non-empty iterator

scala> b.combinations(2).foreach(x=>println(x.mkString(",")))
1,2
1,3
2,3

scala> b.permutations.foreach(x=>println(x.mkString(",")))
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1

 prefixLength

给定一个条件,返回满足条件的长度
遇到不满足条件退出

scala> a
res84: Array[Int] = Array(1, 2, 7, 4)

scala> a.prefixLength(_>0)
res85: Int = 4

scala> a.prefixLength(_>1)
res86: Int = 0

product

返回所有元素的乘积

scala> b
res159: Array[Int] = Array(1, 2, 3)

scala> b.product
res160: Int = 6

 reduce

和fold类似,但不需要初始值
reduceLeft/reduceRight
reduceLeftOption/reduceRightOption

scala> b
res159: Array[Int] = Array(1, 2, 3)
scala> b.reduce(_+_)
res162: Int = 6

reverse

反转序列

scala> b
res163: Array[Int] = Array(1, 2, 3)

scala> b.reverse
res164: Array[Int] = Array(3, 2, 1)

reverseIterator

反向生成迭代

scala> b
res167: Array[Int] = Array(1, 2, 3)

scala> b.reverseIterator.foreach(x=>println(x))
3
2
1

reverseMap

同Map方法向反

scala> b
res167: Array[Int] = Array(1, 2, 3)
scala> b.reverseMap(_+10)
res170: Array[Int] = Array(13, 12, 11)

scala> b.reverseMap(_+10).mkString(",")
res171: String = 13,12,11

sameElements

判断两个序列是否顺序和对应位置上的元素都一样

scala> a
res175: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)

scala> b
res176: Array[Int] = Array(1, 2, 3)
scala> a.containsSlice(b)
res173: Boolean = true

scala> a.sameElements(b)
res174: Boolean = false

scan

同fold,但scan会把每一步的计算结果放到一个新的集合中返回,而 fold 返回的是单一的值
scanLeft
scanRight

scala> a
res175: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)
scala> a.scan(1)((x,y)=>x+y)
res177: Array[Int] = Array(1, 2, 4, 7, 11, 16, 17, 19, 22)

scala> a.fold(1)((x,y)=>x+y)
res178: Int = 22

segmentLength

从序列的 from 处开始向后查找,所有满足 p 的连续元素的长度
 当遇到不满足条件时则停止查找

 
scala> a
res179: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)
 scala> a.segmentLength(_>1,1)
res184: Int = 4

seq

产生一个引用当前序列的 sequential 视图

scala> a
res179: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)

scala> a.seq
res186: scala.collection.mutable.IndexedSeq[Int] = WrappedArray(1, 2, 3, 4, 5, 1, 2, 3)

size

序列元素个数 length
slice 取出当前序列中,from到util之间的片段(前包后不包)

scala> a
res179: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)

scala> a.size
res187: Int = 8

scala> a.slice(1,4)
res188: Array[Int] = Array(2, 3, 4)

sliding

从第一个元素开始,每size个元素组成一个数组,当剩余元素不够时,停止
sliding(m,n)表示从第一个开始以m个长度组成数组,n表示第二个数组从第n+个开始

scala> a
res179: Array[Int] = Array(1, 2, 3, 4, 5, 1, 2, 3)
scala> a.sliding(4).foreach(x=>println(x.mkString(",")))
1,2,3,4
2,3,4,5
3,4,5,1
4,5,1,2
5,1,2,3

scala> a.sliding(4,2).foreach(x=>println(x.mkString(",")))
1,2,3,4
3,4,5,1
5,1,2,3

scala> a.sliding(4,3).foreach(x=>println(x.mkString(",")))
1,2,3,4
4,5,1,2
2,3

scala> a.sliding(4,4).foreach(x=>println(x.mkString(",")))
1,2,3,4
5,1,2,3

sortBy

按指定的排序规则排序

scala> a
res12: Array[Int] = Array(1, 2, 3, 4, 5)

scala> a.sortBy(x=>x)
res13: Array[Int] = Array(1, 2, 3, 4, 5)

scala> a.sortBy(x=>(-x))
res14: Array[Int] = Array(5, 4, 3, 2, 1)

scala> a.sortBy(x=>x%2==0)
res15: Array[Int] = Array(1, 3, 5, 2, 4)

scala> a.sortBy(x=>x>5)
res16: Array[Int] = Array(1, 2, 3, 4, 5)

scala> a.sortBy(x=>x<5)
res17: Array[Int] = Array(5, 1, 2, 3, 4)

scala> a.sortBy(x=>x<3)
res18: Array[Int] = Array(3, 4, 5, 1, 2)

scala> a.sortBy(x=>x<2)
res19: Array[Int] = Array(2, 3, 4, 5, 1)


sorted

使用默认的排序规则对序列排序

scala> a
res20: Array[Int] = Array(1, 2, 3, 4, 5)

scala> a.sorted
res21: Array[Int] = Array(1, 2, 3, 4, 5)

scala> var b=Array("hello","how","are","you")
b: Array[String] = Array(hello, how, are, you)

scala> b.sorted
res22: Array[String] = Array(are, hello, how, you)

span

分割序列为两个集合,从第一个元素开始,直到找到第一个不满足条件的元素止

scala> a
res23: Array[Int] = Array(1, 2, 3, 4, 5)
scala> a.span(_<3)
res25: (Array[Int], Array[Int]) = (Array(1, 2),Array(3, 4, 5))

scala> var a=Array(1,1,1,11,2,2,2,6,7,14)
a: Array[Int] = Array(1, 1, 1, 11, 2, 2, 2, 6, 7, 14)
scala> a.span(_<10)
res28: (Array[Int], Array[Int]) = (Array(1, 1, 1),Array(11, 2, 2, 2, 6, 7, 14))

splitAt

从指定位置开始,把序列拆成两个集合

scala> a
res33: Array[Int] = Array(1, 1, 1, 11, 2, 2, 2, 6, 7, 14)

scala> a.splitAt(2)
res34: (Array[Int], Array[Int]) = (Array(1, 1),Array(1, 11, 2, 2, 2, 6, 7, 14))

scala> a.splitAt(4)
res35: (Array[Int], Array[Int]) = (Array(1, 1, 1, 11),Array(2, 2, 2, 6, 7, 14))

 startsWith

从指定偏移处,是否以某个序列开始

 scala> a
res38: Array[Int] = Array(1, 1, 1, 11, 2, 2, 2, 6, 7, 14)

scala> var b =Array(1,1,1)
b: Array[Int] = Array(1, 1, 1)
 scala> a.startsWith(b)
res40: Boolean = true

scala> var b=Array(2,2,2)
b: Array[Int] = Array(2, 2, 2)

scala> a.startsWith(b,4)
res41: Boolean = true

stringPrefix

返回toString结果的前缀

scala> var a=Array(1,1,11,2,2,6,7,8,14)
a: Array[Int] = Array(1, 1, 11, 2, 2, 6, 7, 8, 14)

scala> a.stringPrefix
res0: String = [I

subSequence

返回start和end间的字符序列 (左包含右不包含)

scala> val aa=Array('a','b','c','d','e','f','d')
aa: Array[Char] = Array(a, b, c, d, e, f, d)

scala> aa.subSequence(3,5)
res2: CharSequence = de

sum

序列求和

scala> a
res3: Array[Int] = Array(1, 1, 11, 2, 2, 6, 7, 8, 14)

scala> a.sum
res4: Int = 52

tail

返回当前序列除了第一个元素的其他元素组成的序列

scala> a
res6: Array[Int] = Array(1, 1, 11, 2, 2, 6, 7, 8, 14)

scala> a.tail
res7: Array[Int] = Array(1, 11, 2, 2, 6, 7, 8, 14)

take

返回序列中前n个元素组成的序列

scala> a
res9: Array[Int] = Array(1, 1, 11, 2, 2, 6, 7, 8, 14)

scala> a.take(4)
res10: Array[Int] = Array(1, 1, 11, 2)

scala> a.take(5)
res11: Array[Int] = Array(1, 1, 11, 2, 2)

takeRight

返回当前序列中从右边开始,前n个元素组成的序列

scala> a
res12: Array[Int] = Array(1, 1, 11, 2, 2, 6, 7, 8, 14)

scala> a.takeRight(3)
res13: Array[Int] = Array(7, 8, 14)

scala> a.takeRight(5)
res14: Array[Int] = Array(2, 6, 7, 8, 14)

takeWhile

返回当前序列,从第一个元素开始,满足条件的连续元素组成的序列
遇到不满足条件的退出 

scala> a
res15: Array[Int] = Array(1, 1, 11, 2, 2, 6, 7, 8, 14)

scala> a.takeWhile(_>0)
res16: Array[Int] = Array(1, 1, 11, 2, 2, 6, 7, 8, 14)

scala> a.takeWhile(x=>x%2==1)
res17: Array[Int] = Array(1, 1, 11)

 toArray

转换成Array类型

 scala> var bb=List(1,2,3,4,5)
bb: List[Int] = List(1, 2, 3, 4, 5)

scala> bb.toArray
res18: Array[Int] = Array(1, 2, 3, 4, 5)

toBufffer

转换成Buffer类型

 scala> var bb=List(1,2,3,4,5)
bb: List[Int] = List(1, 2, 3, 4, 5)
scala> bb.toBuffer
res19: scala.collection.mutable.Buffer[Int] = ArrayBuffer(1, 2, 3, 4, 5)

 toIndexedSeq

转换成IndexedSeq类型

scala> var bb=List(1,2,3,4,5)
bb: List[Int] = List(1, 2, 3, 4, 5)
 
scala> bb.toIndexedSeq
res20: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 2, 3, 4, 5)

 tolterable

转换成可迭代的类型

 scala> a
res21: Array[Int] = Array(1, 1, 11, 2, 2, 6, 7, 8, 14)

scala> a.iterator
res22: Iterator[Int] = non-empty iterator

scala> res22.toIterable
res23: Iterable[Int] = Stream(1, ?)

toIterator 同iterator方法
toList 同List类型
toMap 同Map类型
toSeq 同Seq类型
toSet 同Set类型
toStream 同Stream类型
toVector 同Vector类型


transpose

矩阵转换,二维数组列转换

scala> a
res33: Array[Array[String]] = Array(Array(a, b), Array(c, d))

scala> a
res34: Array[Array[String]] = Array(Array(a, b), Array(c, d))

scala> a.transpose
res35: Array[Array[String]] = Array(Array(a, c), Array(b, d))

scala> a.transpose.flatten
res36: Array[String] = Array(a, c, b, d)

union

联合两个序列,同++

scala> a
res38: Array[Array[String]] = Array(Array(a, b), Array(c, d))
scala> var b=Array(1,1,1)
b: Array[Int] = Array(1, 1, 1)

scala> a.union(b)
res40: Array[Any] = Array(Array(a, b), Array(c, d), 1, 1, 1)

unzip

将含有两个元素的数组,转置

scala> val a=Array(("a","b"),("c","d"))
a: Array[(String, String)] = Array((a,b), (c,d))

scala> a.unzip
res42: (Array[String], Array[String]) = (Array(a, c),Array(b, d))

unzip3

将含有两个元素的数组,转置

scala> val a=Array(("a","b","x"),("c","d","y"))
a: Array[(String, String, String)] = Array((a,b,x), (c,d,y))

scala> a.unzip3
res44: (Array[String], Array[String], Array[String]) = (Array(a, c),Array(b, d),Array(x, y))

update

将序列中i索引出的元素更新为x

scala> val a=Array(1,2,3,4)
a: Array[Int] = Array(1, 2, 3, 4)

scala> a.update(2,7)

scala> a
res47: Array[Int] = Array(1, 2, 7, 4)

scala> a.updated(1,10)
res48: Array[Int] = Array(1, 10, 7, 4)

scala> a
res49: Array[Int] = Array(1, 2, 7, 4)

view

返回from到until间的序列,不包括until处的元素

scala> a
res49: Array[Int] = Array(1, 2, 7, 4)

scala> a.view(0,3)
res50: scala.collection.mutable.IndexedSeqView[Int,Array[Int]] = SeqViewS(...)

scala> a.view(0,2).toList
res51: List[Int] = List(1, 2)

scala> a.view(0,3).toList
res52: List[Int] = List(1, 2, 7)

withFilter

根据条件p过滤元素

scala> a
res63: Array[Int] = Array(1, 2, 7, 4)

scala> a.withFilter(_<5)
res64: scala.collection.generic.FilterMonadic[Int,Array[Int]] = scala.collection.TraversableLike$WithFilter@79aec8c0

scala> a.withFilter(_<5).foreach(println(_))
1
2
4

zip

将两个序列对应位置上的元素组成一个pair序列

scala> a
res69: Array[Int] = Array(1, 2, 7, 4)

scala> val b=Array(3,4,5,6)
b: Array[Int] = Array(3, 4, 5, 6)

scala> a.zip(b)
res70: Array[(Int, Int)] = Array((1,3), (2,4), (7,5), (4,6))

zipAll

同zip,但是允许两个序列长度不同
a.zipAll(b,this,that)this替代a不足的位置,that 替代b不足的位置

scala> a
res75: Array[Int] = Array(1, 2, 7, 4)

scala> b
res76: Array[Int] = Array(3, 4)

scala> a.zipAll(b,10,20)
res77: Array[(Int, Int)] = Array((1,3), (2,4), (7,20), (4,20))

scala> b.zipAll(a,10,20)
res78: Array[(Int, Int)] = Array((3,1), (4,2), (10,7), (10,4))

zipWithIndex

序列中的每个元素和它的索引组成一个序列

scala> a
res79: Array[Int] = Array(1, 2, 7, 4)

scala> a.zipWithIndex
res80: Array[(Int, Int)] = Array((1,0), (2,1), (7,2), (4,3))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值