scala 集合List Array Seq详解

参考Scala 系列(五)—— 集合类型综述

scala> val l=List(1 to 10:_*)
val l: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

scala> val a=Array(1 to 10:_*)
val a: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

scala> val s=Seq(1 to 10:_*)
val s: Seq[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

A

scala> a.a
addString(                 andThen(                   appendedAll(               applyOrElse(               asInstanceOf (universal)
aggregate(  (deprecated)   appended(                  apply(                     array


scala> l.a
addString(                 andThen(                   appendedAll(               applyOrElse(
aggregate(  (deprecated)   appended(                  apply(                     asInstanceOf (universal)

scala> s.a
addString(                 andThen(                   appendedAll(               applyOrElse(
aggregate(  (deprecated)   appended(                  apply(                     asInstanceOf (universal)

addString vs mkString

  • 构造字符串函数
def addString(b: StringBuilder, start: String, sep: String, end: String): StringBuilder
def addString(b: StringBuilder, sep: String): StringBuilder = addString(b, "", sep, "")
def addString(b: StringBuilder): StringBuilder = addString(b, "")

mkString 内部调用了addString 的方法
看源码

 def mkString(start: String, sep: String, end: String): String =
    addString(new StringBuilder(), start, sep, end).toString

  def mkString(sep: String): String = mkString("", sep, "")

  def mkString: String = mkString("")
  • Demo
scala> a.addString(new StringBuilder(),":")
val res415: StringBuilder = 1:2:3:4:5:6:7:8:9:10

scala> a.addString(new StringBuilder(),"start",":","end")
val res416: StringBuilder = start1:2:3:4:5:6:7:8:9:10end

scala> a.addString(new StringBuilder("test"),"start",":","end")
val res417: StringBuilder = teststart1:2:3:4:5:6:7:8:9:10end

andThen

与map基本相同,不同点在于计算是惰性的。

scala> l.map(_*200+9)
val res459: List[Int] = List(209, 409, 609, 809, 1009, 1209, 1409, 1609, 1809, 2009)

scala> s.andThen(_*200+9)
val res460: PartialFunction[Int,Int] = <function1>

scala> s.andThen(_*200+9)(0)
val res461: Int = 209

andThen 是个偏函数

Scala学习笔记(六) Scala的偏函数和偏应用函数

appendedAll vs appended

  • appended append 一个元素
  • appendedAll append一个集合
scala> a.appendedAll(s.toArray)
val res478: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

scala> a.appended(100)
val res481: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100)

applyOrElse

  • 定义
    def applyOrElse[A1 <: A, B1 >: B](x: A1, default: A1 => B1): B1 = if (isDefinedAt(x)) apply(x) else default(x)
  • 功能
    接收2个参数,第一个是调用的参数,第二个是个回调函数。如果第一个调用的参数能匹配,返回匹配的值,否则调用回调函数。(回调函数的输入类型需与调用参数类型一致),就相当于if-else分支调用函数
scala> a.applyOrElse(100,{i=>i+5})
                         ^
      error: missing parameter type

scala> a.applyOrElse(100,{i:Int=>i+5})
val res829: Int = 105

scala> a.applyOrElse(4,{i:Int=>i+5})
val res830: Int = 5

scala> a.apply(4)
val res832: Int = 5

C

scala> l.c
canEqual(                    combinations(                concat(                      copyToArray(                 count(
collect(                     companion     (deprecated)   contains(                    copyToBuffer( (deprecated)
collectFirst(                compose(                     containsSlice(               corresponds(

scala> a.c
canEqual(                    collectFirst(                compose(                     containsSlice(               corresponds(
clone()                      combinations(                concat(                      copyToArray(                 count(
collect(                     companion     (deprecated)   contains(                    copyToBuffer( (deprecated)

scala> s.c
canEqual(                    combinations(                concat(                      copyToArray(                 count(
collect(                     companion     (deprecated)   contains(                    copyToBuffer( (deprecated)
collectFirst(                compose(                     containsSlice(               corresponds(



count

  • 满足某条件的下的元素的个数
  • 同 filter然后size
scala> s.count(x=>x>5)
val res1433: Int = 5

scala> s.filter(x=>x>5).size
val res1435: Int = 5


concat

  • 连接多个Traversable 对象到一个新的Traversable 对象
scala> a.concat(s)
val res600: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

contains vs containsSlice

  • contains 是否包含某个元素
  • containsSlice 是否包含某个子序列
scala> val sli=Seq(3,4,5)
val sli: Seq[Int] = List(3, 4, 5)

scala> a.containsSlice(sli)
val res594: Boolean = true

scala> a.contains(8)
val res596: Boolean = true

collect vs collectFirst

  • 利用偏函数筛选元素
scala> a.collect{case i if i%2==0=>i*i}
val res601: Array[Int] = Array(4, 16, 36, 64, 100)

def filterEven:PartialFunction[Int,Int]={
    case x if x%2==0=>x
  }
l.collect(filterEven)
  • 源码
 def collect[B, That](pf: PartialFunction[A, B])(implicit bf: CanBuildFrom[Repr, B, That]): That = {
    val b = bf(repr)
    foreach(pf.runWith(b += _))
    b.result
  }
  • 使用collect 时,利用偏函数的原理,可以同时实现filter 和map的特性。
    l.collect { case i if i % 2 == 0 => i * i } 等同与
    l.filter(i => i % 2 == 0).map(i => i * i)

  • collectFirst collect的第一个元素

combinations

  • def combinations(n: Int): Iterator[Repr] =
    n个元素的可能组合,返回迭代器
scala> s.combinations(1)
val res633: Iterator[Seq[Int]] = <iterator>

scala> s.combinations(1).toList
val res635: List[Seq[Int]] = List(List(1), List(2), List(3), List(4), List(5), List(6), List(7), List(8), List(9), List(10))

scala> s.combinations(1).toList.flatten
val res638: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

scala> s.combinations(2).toList.flatten
val res639: List[Int] = List(1, 2, 1, 3, 1, 4, 1, 5, 1, 6, 1, 7, 1, 8, 1, 9, 1, 10, 2, 3, 2, 4, 2, 5, 2, 6, 2, 7, 2, 8, 2, 9, 2, 10, 3, 4, 3, 5, 3, 6, 3, 7, 3, 8, 3, 9, 3, 10, 4, 5, 4, 6, 4, 7, 4, 8, 4, 9, 4, 10, 5, 6, 5, 7, 5, 8, 5, 9, 5, 10, 6, 7, 6, 8, 6, 9, 6, 10, 7, 8, 7, 9, 7, 10, 8, 9, 8, 10, 9, 10)

scala> s.combinations(2).toList
val res640: List[Seq[Int]] = List(List(1, 2), List(1, 3), List(1, 4), List(1, 5), List(1, 6), List(1, 7), List(1, 8), List(1, 9), List(1, 10), List(2, 3), List(2, 4), List(2, 5), List(2, 6), List(2, 7), List(2, 8), List(2, 9), List(2, 10), List(3, 4), List(3, 5), List(3, 6), List(3, 7), List(3, 8), List(3, 9), List(3, 10), List(4, 5), List(4, 6), List(4, 7), List(4, 8), List(4, 9), List(4, 10), List(5, 6), List(5, 7), List(5, 8), List(5, 9), List(5, 10), List(6, 7), List(6, 8), List(6, 9), List(6, 10), List(7, 8), List(7, 9), List(7, 10), List(8, 9), List(8, 10), List(9, 10))

compose

count

canEqula

  • 作用判断两个对象是否可以比较

D

scala> a.d
diff(         distinct      distinctBy(   drop(         dropRight(    dropWhile(

scala> l.d
diff(         distinct      distinctBy(   drop(         dropRight(    dropWhile(

scala> s.d
diff(         distinct      distinctBy(   drop(         dropRight(    dropWhile(

diff

  • diff 两个集合的差集

distinct

  • 集合去重
scala> a.concat(a).distinct
val res684: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

distinctBy

  • 方法在应用给定的转换函数后返回序列的所有元素,而忽略重复项:
scala> List(("a", 2.7), ("b", 2.1), ("a", 5.4)).distinctBy(_._2.floor)
val res720: List[(String, Double)] = List((a,2.7), (a,5.4))

scala> List(("a", 2), ("b", 2), ("a", 5)).distinctBy(_._1)
val res721: List[(String, Int)] = List((a,2), (b,2))

scala> List(("a", 2), ("b", 2), ("a", 5)).distinctBy(_._2)
val res722: List[(String, Int)] = List((a,2), (a,5))

drop (n) vs dropRight (n)

  • 丢弃前N个或者后N个元素
scala> a.drop(3)
val res687: Array[Int] = Array(4, 5, 6, 7, 8, 9, 10)

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

dropWhile

  • dropWhile 丢弃条件所在集合开头的所有项目true,一旦第一项失败,它就会停止丢弃
scala> a.dropWhile(x=>{x>0})
val res713: Array[Int] = Array()

scala> a.dropWhile(x=>{x>4})
val res714: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

scala> a.dropWhile(x=>x<4)
val res718: Array[Int] = Array(4, 5, 6, 7, 8, 9, 10)

  • 跟filter的区别 filter丢弃整个集合中条件不正确的所有元素

E


scala> a.e
elemTag                 empty                   ensuring( (universal)   equals(   (universal)
elementWise             endsWith(               eq(       (universal)   exists(

scala> l.e
elementWise             empty                   endsWith(               ensuring( (universal)   eq(       (universal)   equals(                 exists(

scala> s.e
elementWise             empty                   endsWith(               ensuring( (universal)   eq(       (universal)   equals(                 exists(

val t: Iterable[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

scala> a.e
elemTag                 empty                   ensuring( (universal)   equals(   (universal)
elementWise             endsWith(               eq(       (universal)   exists(

elemTag

返回集合元素的类型

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

scala> sss.elemTag
val res805: scala.reflect.ClassTag[(Int, Int)] = scala.Tuple2

scala> a.elemTag
val res808: scala.reflect.ManifestFactory.IntManifest = Int

empty

集合置空

equals vs eq

  • eq 判断两个对象地址是否相同
scala> a.equals(s)
val res902: Boolean = false

scala> l.equals(s)
val res903: Boolean = true


scala> a.eq(s)
val res904: Boolean = false

scala> a.eq(s)
val res905: Boolean = false

endsWith vs startWith

判断集合是否以某个序列开始或者结束

scala> a.endsWith(Array(9,10))
val res812: Boolean = true

scala> a.endsWith(Array(1,9,10))
val res813: Boolean = false

exists

  • 判断当前数组是否包含符合条件的元素
scala> a.exists(x=>x>100)
val res817: Boolean = false

scala> a.exists(x=>x>4)
val res818: Boolean = true

F

scala> t.f
filter(                  find(                    flatten(                 foldLeft(                forall(                  formatted( (universal)
filterNot(               flatMap(                 fold(                    foldRight(               foreach(

filter vs filterNot

  • filter 返回满足条件的元素
  • filterNot 返回不满足条件的元素
scala> a.filterNot(x=>x%2==0)
val res879: Array[Int] = Array(1, 3, 5, 7, 9)

scala> a.filterNot(x=>x%2==0).concat(a.filter(x=>x%2==0))
val res885: Array[Int] = Array(1, 3, 5, 7, 9, 2, 4, 6, 8, 10)


find

scala> a.find(x=>x>1)
val res951: Option[Int] = Some(2)

scala> a.find(x=>x>100)
val res952: Option[Int] = None

flatten

二维数组扁平化

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

forall

  • forall 是否每个元素都满足条件
scala> a.forall(x=>x>3)
val res960: Boolean = false

scala> a.forall(x=>x>0)
val res961: Boolean = true

scala> a.forall(x=>x>1)
val res962: Boolean = false

scala> a.forall(x=>x<100)
val res963: Boolean = true

formatted

flatMap

先map后降维

scala> arr.flatMap(_.map(_+1))
val res936: Array[Int] = Array(2, 3, 4, 4, 5, 6, 7, 8)

等同与一下操作
scala> arr.map(_.map(_+1))
val res937: Array[Array[Int]] = Array(Array(2, 3, 4), Array(4, 5, 6), Array(7, 8))

scala> arr.map(_.map(_+1)).flatten
val res938: Array[Int] = Array(2, 3, 4, 4, 5, 6, 7, 8)

fold vs foldRight nv foldLeft

fold 同foldLeft

scala> str.fold("Z")(_+_)
val res945: String = ZABCD

scala> str.foldLeft("Z")(_+_)
val res947: String = ZABCD

scala> str.foldRight("Z")(_+_)
val res949: String = ABCDZ

foreach

  • 作用 针对每个元素调用函数,并且忽略函数结果
scala> a.foreach(x=>x*x)

scala> a.foreach(print)
12345678910
scala> a.foreach(print(_))
12345678910

G

scala> t.g
getClass() (universal)   groupBy(                 groupMap(                groupMapReduce(          grouped(

groupBy

scala> val t=Array(("Tom",12),("Tim",12),("Tom",12),("Tom",24),("Tim",23),("Penny",12))
val t: Array[(String, Int)] = Array((Tom,12), (Tim,12), (Tom,12), (Tom,24), (Tim,23), (Penny,12))

scala> t.groupBy
def groupBy[K](f: ((String, Int)) => K): scala.collection.immutable.Map[K,Array[(String, Int)]]
scala> t.groupBy(_._1)
val res1014: scala.collection.immutable.Map[String,Array[(String, Int)]] = Map(Penny -> Array((Penny,12)), Tom -> Array((Tom,12), (Tom,12), (Tom,24)), Tim -> Array((Tim,12), (Tim,23)))

scala> t.groupBy(x=>x._1)("Tom")
val res1029: Array[(String, Int)] = Array((Tom,12), (Tom,12), (Tom,24))


scala> t.groupBy(_._2)
val res1015: scala.collection.immutable.Map[Int,Array[(String, Int)]] = Map(23 -> Array((Tim,23)), 24 -> Array((Tom,24)), 12 -> Array((Tom,12), (Tim,12), (Tom,12), (Penny,12)))

scala> a.groupBy(x=>x>5)
val res1025: scala.collection.immutable.Map[Boolean,Array[Int]] = Map(false -> Array(1, 2, 3, 4, 5), true -> Array(6, 7, 8, 9, 10))


groupMap

scala> t.groupMap(_._1)(_._2)
val res1032: scala.collection.immutable.Map[String,Array[Int]] = Map(Penny -> Array(12), Tom -> Array(12, 12, 24), Tim -> Array(12, 23))


grouped

  • 按指定数量分组,每组有 size 个元素,返回一个迭代器
scala> a.grouped(2)
val res982: Iterator[Array[Int]] = <iterator>

scala> a.grouped(2).toList
val res985: List[Array[Int]] = List(Array(1, 2), Array(3, 4), Array(5, 6), Array(7, 8), Array(9, 10))

scala> l.grouped(3).toArray
val res989: Array[List[Int]] = Array(List(1, 2, 3), List(4, 5, 6), List(7, 8, 9), List(10))

scala> str.grouped(3).toSeq
val res994: Seq[Iterable[String]] = List(List(A, B, C), List(D))

groupMapReduce

H

scala> t.h
hasDefiniteSize (deprecated)   hashCode()       (universal)   head                           headOption

head vs lat vs headOption vs lastOption vs find

找到第一个或者最后一个或者满足条件的第一个元素

scala> a.last
val res1050: Int = 10

scala> t.head
val res1052: (String, Int) = (Tom,12)

scala> a.headOption
val res1055: Option[Int] = Some(1)

scala> a.headOption
val res1058: Option[Int] = Some(1)

scala> t.headOption
val res1060: Option[(String, Int)] = Some((Tom,12))

scala> a.find(x=>x>5)
val res1062: Option[Int] = Some(6)

I

scala> t.i
indexOf(                   indices                    intersect(                 isInstanceOf (universal)   iterator
indexOfSlice(              init                       isDefinedAt(               isTraversableAgain
indexWhere(                inits                      isEmpty                    iterableFactory

init vs tail inits vs tails

  • head 和last相对
  • init 和tail相对
  • inits 和tails相对. 返回迭代器
  • take 和drop相对
  • takeWhile和dropWhile相对
scala> a.init
val res1082: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)

scala> a.inits
val res1083: Iterator[Array[Int]] = <iterator>

scala> a.tail
val res1084: Array[Int] = Array(2, 3, 4, 5, 6, 7, 8, 9, 10)

scala> a.inits.toList
val res1086: List[Array[Int]] = List(Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), Array(1, 2, 3, 4, 5, 6, 7, 8, 9), Array(1, 2, 3, 4, 5, 6, 7, 8), Array(1, 2, 3, 4, 5, 6, 7), Array(1, 2, 3, 4, 5, 6), Array(1, 2, 3, 4, 5), Array(1, 2, 3, 4), Array(1, 2, 3), Array(1, 2), Array(1), Array())

scala> a.tails
val res1087: Iterator[Array[Int]] = <iterator>

scala> a.tails.toList
val res1089: List[Array[Int]] = List(Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), Array(2, 3, 4, 5, 6, 7, 8, 9, 10), Array(3, 4, 5, 6, 7, 8, 9, 10), Array(4, 5, 6, 7, 8, 9, 10), Array(5, 6, 7, 8, 9, 10), Array(6, 7, 8, 9, 10), Array(7, 8, 9, 10), Array(8, 9, 10), Array(9, 10), Array(10), Array())

isEmpty

判断集合是否是空

intersect

  • 两个集合的交集
scala> a.intersect(Seq(5,6,7,100,23))
val res1095: Array[Int] = Array(5, 6, 7)

indexOf vs indexOfSlice vs indexWhere

存在返回索引 否则返回-1

scala> a.indexOfSlice(Seq(5,6))
val res1110: Int = 4

scala> a.indexOfSlice(Seq(5,6,8))
val res1111: Int = -1

scala> a.indexOfSlice(Seq(9,10))
val res1112: Int = 8

scala> a.indexWhere(x=>x>5)
val res1116: Int = 5

scala> a.indexOf(3)
val res1119: Int = 2

indices

  • 返回索引
scala> arr.indices
val res1123: scala.collection.immutable.Range = Range 0 until 3

scala> arr.indices.toList
val res1126: List[Int] = List(0, 1, 2)

K

knowSize

  • 测试此集合是否已知具有有限大小
scala> a.knownSize
val res1157: Int = 10

scala> s.knownSize
val res1159: Int = -1

scala> l.knownSize
val res1161: Int = -1

L

scala> t.l
last                lastIndexOfSlice(   lastOption          length              lengthIs
lastIndexOf(        lastIndexWhere(     lazyZip(            lengthCompare(      lift

lazyZip

scala> a.lazyZip(s).toList
val res1224: List[(Int, Int)] = List((1,1), (2,2), (3,3), (4,4), (5,5), (6,6), (7,7), (8,8), (9,9), (10,10))

scala> a.zip(s)
val res1225: Array[(Int, Int)] = Array((1,1), (2,2), (3,3), (4,4), (5,5), (6,6), (7,7), (8,8), (9,9), (10,10))

scala> a.lazyZip(s)
val res1226: scala.collection.LazyZip2[Int,Int,Array[Int]] = ArraySeq(1, 2, 3, 4, 5, 6, 7, 8, 9, 10).lazyZip(List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))


lift

last vs lastIndexOf vs lastIndexWhere vs lastIndexOfSlice vs latOption

scala> a.last
val res1166: Int = 10

scala> a.lastIndexOf(9)
val res1174: Int = 8

scala> a.lastIndexOfSlice(Seq(9,10))
val res1188: Int = 8

scala> a.lastIndexOfSlice(Seq(9,10,12))
val res1189: Int = -1

scala> a.lastIndexWhere(x=>x>1)
val res1194: Int = 9

length vs lengthIs

  • 返回个数

lengthCompare

scala> a.lengthCompare(10)
val res1209: Int = 0

scala> a.lengthCompare(9)
val res1210: Int = 1

scala> a.lengthCompare(11)
val res1211: Int = -1

M

scala> t.m
map(           mapInPlace(    max(           maxBy(         maxByOption(   maxOption(     min(           minBy(         minByOption(   minOption(     mkString(

min vs max vs minBy vs maxBy vs minOption vs maxOption vs minByOption vs maxByOption

scala> arr.maxBy(x=>x(1))
val res1276: Array[Int] = Array(6, 7)

scala> arr
val res1277: Array[Array[Int]] = Array(Array(1, 2, 3), Array(3, 4, 5), Array(6, 7))

scala> arr.maxByOption(x=>x(1))
val res1279: Option[Array[Int]] = Some([I@399b7e3d)

scala> arr.minBy(x=>x(0))
val res1284: Array[Int] = Array(1, 2, 3)

scala> l.min
val res1285: Int = 1

scala> l.max
val res1286: Int = 10

scala> l.minOption
val res1288: Option[Int] = Some(1)



mkString

scala> l.mkString("start",":","over")
val res1296: String = start1:2:3:4:5:6:7:8:9:10over

mapConserve

N

scala> t.n
ne(         (universal)   nonEmpty                  notify()    (universal)   notifyAll() (

P

scala> t.p
padTo(                       partitionMap(                permutations                 prepended(                   product(
partition(                   patch(                       prefixLength( (deprecated)   prependedAll(

R

scala> t.r
reduce(                    reduceLeftOption(          reduceRight(               repr        (deprecated)   reverseIterator            runWith(
reduceLeft(                reduceOption(              reduceRightOption(         reverse                    reverseMap( (de

S

scala> t.s
sameElements(               search(                     sizeCompare(                sortBy(                     sortWith(                   startsWith(
scan(                       segmentLength(              sizeIs                      sortInPlace(                sorted(                     stepper(
scanLeft(                   seq          (deprecated)   slice(                      sortInPlaceBy(              span(                       sum(
scanRight(                  size                        sliding(                    sortInPlaceWith(            splitAt(                    synchronized( (uni

T

scala> t.t
tail                         takeWhile(                   toBuffer                     toList                       toStream      (deprecated)   transform(    (deprecated)
tails                        tapEach(                     toIndexedSeq                 toMap(                       toString()     (universal)   transpose(
take(                        to(                          toIterable                   toSeq                        toTraversable (deprecated)
takeRight(                   toArray(                     toIterator    (deprecated)   toSet                        toVector

U

scala> t.u
unapply(              union( (deprecated)   unzip(                unzip3(               update(               updated(

unzip vs unzip

  • unzip将元素拆分,转成2个列表
    -unzip3 转成3个列表
scala> val t=Traversable("a_1","b_2","c_2")
             ^
       warning: value Traversable in package scala is deprecated (since 2.13.0): Use Iterable instead of Traversable
val t: Iterable[String] = List(a_1, b_2, c_2)

scala> t.unzip(x=>(x(0),x.substring(2).toInt))
val res1423: (Iterable[Char], Iterable[Int]) = (List(a, b, c),List(1, 2, 2))

scala> t.unzip3(x=>(x(0),x.substring(2).toInt,x.substring(1)))
val res1428: (Iterable[Char], Iterable[Int], Iterable[String]) = (List(a, b, c),List(1, 2, 2),List(_1, _2, _2))

union 同concat (已经弃用)

update vs updated

  • 更新集合
  • update 更新原集合 updated产生新的结合
scala> a.update(1,200)

scala> a
val res1403: Array[Int] = Array(1, 200, 3, 4, 5, 6, 7, 8, 9, 10)

scala> a.updated(1,1000)
val res1405: Array[Int] = Array(1, 1000, 3, 4, 5, 6, 7, 8, 9, 10)

V

scala> t.view
view( (deprecated)


W


scala> t.w
wait( (universal)   withFilter(

withFilter vs filter

  • filter将采用原始集合并产生一个新集合,但是withFilter将非严格(即懒惰地)将未过滤的值传递给以后的map / flatMap / withFilter调用,从而保存第二次传递通过(过滤的)集合。因此,当传递到这些后续方法调用时,它将更加高效。
scala> l.withFilter(x=>x>5)
val res1370: scala.collection.WithFilter[Int,[_]List[_]] = scala.collection.IterableOps$WithFilter@3f7f71e7

scala> l.withFilter(x=>x>5).map(_+1)
val res1371: List[Int] = List(7, 8, 9, 10, 11)

scala> l.filter(x=>x>5)
val res1373: List[Int] = List(6, 7, 8, 9, 10)

scala> l.filter(x=>x>5).map(_+1)
val res1374: List[Int] = List(7, 8, 9, 10, 11)

Z

scala> t.zip
zip(           zipAll(        zipWithIndex

zip vs zipAll vs zipWithIndex

  • 把两个集合合并为二元数组集合
  • zip 后的长度为两个集合的最小长度
  • zipAll 同zip,区别是可以设置默认值,长度为两个集合的最大长度
  • zipWithIndex 与自己的索引zip
scala> a.zipWithIndex
val res1360: Array[(Int, Int)] = Array((1,0), (2,1), (3,2), (4,3), (5,4), (6,5), (7,6), (8,7), (9,8), (10,9))

scala> a.zipWithIndex(0)
val res1361: (Int, Int) = (1,0)

scala> val l=Seq("A","B","C")
val l: Seq[String] = List(A, B, C)

scala> val m=Seq(3,4,5,6,7,8)
val m: Seq[Int] = List(3, 4, 5, 6, 7, 8)

scala> l.zip(m)
val res1351: Seq[(String, Int)] = List((A,3), (B,4), (C,5))

scala> l.zipAll(m,"Z",800)
val res1353: Seq[(String, Int)] = List((A,3), (B,4), (C,5), (Z,6), (Z,7), (Z,8))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值