`
bit1129
  • 浏览: 1067719 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【Scala十】Scala核心四:集合框架之List

 
阅读更多

Spark的RDD作为一个分布式不可变的数据集合,它提供的转换操作,很多是借鉴于Scala的集合框架提供的一些函数,因此,有必要对Scala的集合进行详细的了解

 

1. 泛型集合都是协变的,对于List而言,如果B是A的子类,那么List[B]也是List[A]的子类,即可以把List[B]的实例赋值给List[A]变量

 

2. 给变量赋值(注意val关键字,a,b,c是三个关键字)

    //定义三个变量a,b,c
    val List(a, b, c) = List(1, 2, 3)

 那么,a为1,b为2,c为3

 

3. 给变量赋值(注意val关键字,a,b,c是三个关键字)

 

    //定义三个变量a,b,c
    val a::b::c::Nil = List(1, 2, 3)

如果不使用Nil结尾,那么c的结果是个List,抛开第一个和第二个元素剩下的元素

 

4.元素连接得到List

 

5.多个List连接得到List

 

 

    //X:::Y:::Z,表示X,Y,Z都是List,它们之间是List连接

    val l = List(3, 2, 1) ::: List(4, 5, 6) ::: List(7, 8, 9)//l是1到9的List
    l.foreach(println(_))

 

 

6. mkString(三个参数,前缀,元素分隔,后缀)

 

    val ll = List(1, 2, 3, 5, 6, 7)
    //prefix, separator, suffix
    println(ll.mkString("String of the list: [", ",", "]"))

 

 

7. List的高阶函数map,foreach,flatMap,filter,partition,find,tabulate,concat

7.1 map

It returns the list resulting from applying the function f to each list element。因此集合长度不变

 

    val l = List(1, 2, 3, 4)
    //map: convert each element of the list into Tuple
    val m = l.map(elem => (elem * 2, elem * 4)) //l.map((_*2,_*4))为什么不对?
    m.foreach(println(_));

 

 

7.2 foreach

对List进行for each循环

 

 

val l = List(1, 2, 3, 4)
def square(x: Int) = {
   x * x
}
l.foreach(elem => println(square(elem)))

 

 

7.3. filter

 

过滤得到满足条件的集合

 

val l = List(1, 2, 3, 4)
va evens = l.filter( _%2 == 0) //2,4
evens.foreach(println(_));

 

7.3.1 find

The find method is also similar to filter but it returns the first element satisfying a given predicate, rather than all such elements.

 

    val l = List(1, 2, 3, 4)
    val found = l.find( _%2 == 0) //单元素集合还是单元素?单元素集合!!
    found.foreach(println(_));

 

 

7.4 partition

分区函数的目的是根据条件将List分隔成包含两个元素的二元Tuple,Tuple中的每个元素是一个List,

The partition method is like filter, but it returns a pair of lists. One list contains all elements for which the predicate is true, while the other list contains all elements for which the predicate is false. It is defined by the equality:

 

    val l = List(1, 2, 3, 4)   
    val partitions = l.partition(_%2 == 0)
    partitions._1.foreach(println)
    partitions._2.foreach(println)

 

 

7.5 flatMap

The flatMap operator is similar to map, but it takes a function returning a list of elements as its right operand. It applies the function to each list element and returns the concatenation of all function results

flatMap的参数函数是将元素转换为集合

    val listOfList = List(List(1, 2), List(3, 4), List(5, 6))
    val flatMap = listOfList.flatMap(_.toList) //flatMap的参数是一个函数,它的目的是对每个元素做function操作得到一个集合,然后将每个集合进行合并
    println(flatMap) //1,2,3,4,5,6

 

 

7.6 tabulate

The tabulate method creates a list whose elements are computed according to a supplied function. Its arguments are just like those of List.fill: the first argument list gives the dimensions of the list to create, and the second describes the elements of the list. The only difference is that instead of the elements being fixed, they are computed from a function:

 

 

    //tabulate is method defined on the List, not any instance of List
    val tabulatedList = List.tabulate(6)(n => n * n) //0, 1, 4, 9 16 25
    tabulatedList.foreach(println)

 

 

7.7 fill

The fill method creates a list consisting of zero or more copies of the same element. It takes two parameters: the length of the list to be created, and the element to be repeated. Each parameter is given in a separate list:

 

 

    val fillList = List.fill(10)("Apple")
    fillList.foreach(println) //print 10 Apple String

 

 

    //第一个参数表示元素(List类型)个数,第二个参数表示每个List元素有多少个元素
    val fillList2 = List.fill(2,3)("Apple")
    fillList2.foreach(elem => elem.foreach(println))

 

7.8 concat

 

    val concatList = List.concat(List(1,2,3), List(8,9,10))
    concatList.foreach(println) //结果1,2,3,8,9,10

 

7.9 flatten

 

The flatten method takes a list of lists and flattens it out to a single list

 

    val flattenList = List(List(1,2),List(3,4))
    flattenList.flatten.foreach(println) //1~4

 

7.10 range

    val range = List.range(1,10)
    range.foreach(println) //0~9

 

7.11 zip

The zip operation takes two lists and forms a list of pairs:

    val zip1 = List(1,2,3)
    val zip2 = List("A", "B", "C")
    val zip = zip1.zip(zip2)
    zip.foreach(println)

结果:

(1,A)
(2,B)
(3,C)

 

7.12 zipWithIndex

A useful special case is to zip a list with its index. This is done most efficiently with the zipWithIndex method, which pairs every element of a list with the position where it appears in the list.

 

  List(1,2,3).zipWithIndex.foreach(println)

结果:

(1,0)
(2,1)
(3,2)

 

7.13 unzip

Any list of tuples can also be changed back to a tuple of lists by using the unzip

 

    val unzipped = List((1, "A"), (2, "B"), (3, "C")).unzip
    unzipped._1.foreach(println)
    unzipped._2.foreach(println)

一个包含两个元素的Tuple,两个元素都是List集合,分布是1,2,3和A,BC

 

7.14 List.toArray, Array.toList

List转Array,Array转List

    val arr: Array[Int] = l.toArray
    arr.foreach(println)
    val list : List[Int] = arr.toList
    list.foreach(println)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Scala-part2集合框架

    Scala集合框架的设计使得开发者可以根据具体需求选择最合适的集合类型。不可变集合适用于不需要修改的场景,而可变集合则适用于需要频繁修改的场景。理解不同集合类型之间的差异和特性有助于编写更高效、更安全的...

    scala核心编程总结

    为了更好地理解Scala集合类的强大之处,考虑以下示例: ```scala val people = List((17, "Alice"), (22, "Bob"), (15, "Charlie")) val (minors, adults) = people.partition(_._1 ) ``` 在这个示例中,`people`...

    最好的scala学习 课件

    本课件是针对Scala学习者精心准备的资源,旨在帮助你深入理解和掌握Scala的核心概念,并进一步熟悉在Spark框架中的应用。 首先,我们从"Scala进阶之路-part01-基础.pdf"开始,这部分内容主要涵盖了Scala的基础知识...

    Scala编程 pdf

    8. **Akka框架**:虽然不是语言本身的一部分,但Akka是基于Scala构建的一个广泛使用的并发和分布式计算框架,利用Actor模型提供了高度可扩展的解决方案。 9. **Scala与Java互操作**:由于Scala运行在JVM上,它可以...

    韩顺平_Scala语言核心编程 .zip

    5. **集合库**:Scala的集合库是其一大亮点,提供了丰富的数据结构如List、Set、Map,它们都是不可变的,确保了并发安全。集合库也包含了很多高效的算法,如flatMap、filter、map等,这些都是函数式编程的重要工具。...

    Scala-2.11.1.zip

    4. **集合库**:Scala的集合库是其的一大亮点,它包含了丰富的数据结构,如List、Set、Map,以及高效的Seq、Buffer和ArrayBuffer。这些集合支持函数式操作,如map、filter和fold,使得代码更加简洁和高效。 5. **...

    scala实战高清讲解

    - 集合API:Scala的集合库强大且高效,包含各种数据结构如List、Set、Map和ArrayBuffer,提供了丰富的操作方法。 - 并行集合:并行集合可以在多核处理器上并行执行操作,提升计算性能。 6. **模式匹配** - 枚举...

    scala-2.12.8 源码包

    2. **Actor模型**:Scala支持Akka框架,该框架使用Actor模型来处理并发和分布式计算。在源码中,可以了解Actor的内部工作原理,如消息传递、状态管理和故障恢复。 3. **函数式编程**:Scala的函数是一等公民,可以...

    programming in Scala_ch

    - **集合(Set)和映射(Map)**: 掌握Scala中用于存储和检索元素的集合框架。 - **函数式风格**: 了解如何运用函数式编程的技巧来编写更简洁、高效的代码。 #### 类和对象 - **类、字段和方法**: 在Scala中定义类的...

    Programming In Scala 中文版及英文版

    5. **集合库**:Scala的集合库是其强大特性之一,包含各种高效且功能丰富的集合,如List、Set、Map等。这些集合支持函数式操作,提供并行处理能力。 6. **模式匹配**:Scala的模式匹配允许开发者通过`case`语句解构...

    scala-2.12.8.tgz

    6. **集合库**:Scala的集合库是其一大亮点,它提供了丰富的数据结构,如List、Set、Map等,并且这些集合都具有高效的函数式操作。 7. **与Java的互操作性**:由于Scala运行在JVM上,所以可以直接调用Java库,反之...

    Scala Cookbook

    - **集合框架**:Scala的集合库提供了丰富的数据结构,如List、Set、Map等,它们都是不可变的,支持函数式编程风格。 ### 5. 类型系统 - **类型推断**:Scala的类型系统支持类型推断,很多情况下无需显式声明类型...

    Scala详细总结(精辟版++)

    Scala提供了丰富的集合框架,包括不可变集合和可变集合,支持诸如`List`、`Set`、`Map`等多种数据结构。 #### 异常 Scala中的异常处理与Java类似,支持`try`、`catch`和`finally`块。 #### 断言、检查 Scala还支持...

    scala例子 实例

    6. 强大的集合库:Scala的集合库提供了丰富的数据结构,如List、Set、Map,以及高效的转换操作,如map、filter和fold。 下面,我们通过一个简单的“helloscala”示例来进一步了解Scala: ```scala object Hello...

    Scala编程实战

    7. **集合库**:Scala的集合库非常强大,提供了各种高效、易用的数据结构,如List、Set、Map以及各种转换操作,方便进行复杂的数据处理。 8. **表达式导向编程**:Scala鼓励使用表达式而非语句,使得代码更像数学...

    快学Scala 中文版完整目录书签.pdf-含课后习题答案-源码

    4. 集合框架:详述Scala丰富的集合库,包括List、Set、Map等,以及高阶函数的运用。 5. 高级类型系统:介绍类型推断、类型参数化、模式匹配、隐式转换等高级特性。 6. 异常处理:讨论如何在Scala中进行异常捕获和抛...

    scala学习资料

    4. 集合库:Scala的集合库设计精良,包含各种高效的数据结构,如List、Set、Map等。这些集合不仅支持传统的OOP操作,还提供了丰富的函数式API,如map、filter、fold等,方便进行数据处理。 5. 特性与模式匹配:...

    scala学习-project.zip

    5. **集合库**:Scala的集合库非常强大,包括List、Set、Map等,它们提供了丰富的函数式操作,如map、filter、fold等,便于进行数据处理和变换。 6. **高阶函数**:函数在Scala中是第一类公民,可以作为参数传递,...

    scala-2.12.7.msi文件

    5. **集合库**:Scala的集合库是其一大亮点,它提供了丰富的数据结构,如List、Set、Map等,并且这些集合都支持函数式操作,使得处理数据变得更加高效和优雅。 6. ** Actors模型**:Scala内置了Actors模型,这是一...

Global site tag (gtag.js) - Google Analytics