【scala初学】Trait Traversable

简介:

collections.png

     Traversable是所有collections的父类

     Traversable是所有集合层级的最顶端的,他只有一个抽象方法, foreach:

1
def  foreach[U](f :  Elem  = > U)

     实现Traversable只需要定义这个方法,其他方法可以直接继承得到。

foreach 方法以为遍历集合中的所有元素,并且应用传入的方法,f , 对每一个元素。 函数(或者方法,操作)的类型是Elem => U, Elem 是集合元素的类型 而 U是一个任意的结果类型.  函数的f的调用是他的一个副作用,事实上函数的结果都会被 foreach方法丢弃。



  函数分类:Traversable 的方法可以分类如下:

Addition:

         方法名: ++ 

      说明: 同时追加两个traversable,或者追加一个迭代的所有元素到traversable


Map : 

      方法名: map, flatMap, collect

        说明: 通过应用函数到集合的元素中,来产生一个新的集合


Conversions :

      方法名:toArraytoListtoIterabletoSeqtoIndexedSeqtoStreamtoSet,toMap

   说明: 使得 Traversable 变的更加具体。所有这些转换返回的接收器的参数不会改变,如果集合的运行时类型已经匹配了要求的集合类型。 如: 在一个列表中应用 toList,将会调用该列表的 toList方法。


Copying operations :

      方法名 : copyToBuffer,  copyToArray

   说明:作用如他们的名字


Size info:

      方法名:isEmptynonEmptysize, and hasDefiniteSize

   说明:作用如其名,唯一需要说明的是hasDefiniteSize  ,判断一个集合是否有穷还是无穷


Element retrieval: 

      方法名:headlastheadOptionlastOption, and find.

      说明: 头尾方法的定义.  但是有些集合不能很好的定义头尾方法。 如,hash存储是key,value, 又如某些运行时会不断改变元素顺序的。 


Sub-collection retrieval operations :

      方法名: tailinitslicetakedroptakeWhile,dropWhilefilterfilterNotwithFilter

   说明:返回子集合


Subdivision operations : 

      方法名: plitAtspanpartitiongroupBy

   说明:分割集合成几个子集合


Element tests: 

     方法名:existsforallcount

     说明:测试断言(书生:即方法做的事情)是否成立


Folds :

     方法名:foldLeftfoldRight/::\reduceLeftreduceRight

     说明:用二进制的方式操作连续的元素


Specific folds : 

     方法名: sumproductminmax    

     说明:用于特定类型,如数字


String :

    方法名: mkStringaddStringstringPrefix

  说明:转换一个集合到字符串的方式


View:

     方法名: view

   说明:这个方法将单独介绍




Class Traversable中的方法

WHAT IT IS WHAT IT DOES
Abstract Method:
xs foreach f Executes function f for every element of xs.
Addition:
xs ++ ys A collection consisting of the elements of both xs and ysys is a TraversableOnce collection, i.e., either a Traversable or an Iterator.
Maps:
xs map f The collection obtained from applying the function f to every element in xs.
xs flatMap f The collection obtained from applying the collection-valued function f to every element in xs and concatenating the results.
xs collect f The collection obtained from applying the partial function f to every element in xs for which it is defined and collecting the results.
Conversions:
xs.toArray Converts the collection to an array.
xs.toList Converts the collection to a list.
xs.toIterable Converts the collection to an iterable.
xs.toSeq Converts the collection to a sequence.
xs.toIndexedSeq Converts the collection to an indexed sequence.
xs.toStream Converts the collection to a lazily computed stream.
xs.toSet Converts the collection to a set.
xs.toMap Converts the collection of key/value pairs to a map. If the collection does not have pairs as elements, calling this operation results in a static type error.
Copying:
xs copyToBuffer buf Copies all elements of the collection to buffer buf.
xs copyToArray(arr, s, n) Copies at most n elements of the collection to array arr starting at index s. The last two arguments are optional.
Size info:
xs.isEmpty Tests whether the collection is empty.
xs.nonEmpty Tests whether the collection contains elements.
xs.size The number of elements in the collection.
xs.hasDefiniteSize True if xs is known to have finite size.
Element Retrieval:
xs.head The first element of the collection (or, some element, if no order is defined).
xs.headOption The first element of xs in an option value, or None if xs is empty.
xs.last The last element of the collection (or, some element, if no order is defined).
xs.lastOption The last element of xs in an option value, or None if xs is empty.
xs find p An option containing the first element in xs that satisfies p, or None if no element qualifies.
Subcollections:
xs.tail The rest of the collection except xs.head.
xs.init The rest of the collection except xs.last.
xs slice (from, to) A collection consisting of elements in some index range of xs (from from up to, and excluding to).
xs take n A collection consisting of the first n elements of xs (or, some arbitrary n elements, if no order is defined).
xs drop n The rest of the collection except xs take n.
xs takeWhile p The longest prefix of elements in the collection that all satisfy p.
xs dropWhile p The collection without the longest prefix of elements that all satisfy p.
xs filter p The collection consisting of those elements of xs that satisfy the predicate p.
xs withFilter p A non-strict filter of this collection. Subsequent calls to mapflatMapforeach, and withFilter will only apply to those elements of xs for which the condition p is true.
xs filterNot p The collection consisting of those elements of xs that do not satisfy the predicate p.
Subdivisions:
xs splitAt n Split xs at a position, giving the pair of collections (xs take n, xs drop n).
xs span p Split xs according to a predicate, giving the pair of collections (xs takeWhile p, xs.dropWhile p).
xs partition p Split xs into a pair of two collections; one with elements that satisfy the predicate p, the other with elements that do not, giving the pair of collections (xs filter p, xs.filterNot p)
xs groupBy f Partition xs into a map of collections according to a discriminator function f.
Element Conditions:
xs forall p A boolean indicating whether the predicate p holds for all elements of xs.
xs exists p A boolean indicating whether the predicate p holds for some element in xs.
xs count p The number of elements in xs that satisfy the predicate p.
Folds:
(z /: xs)(op) Apply binary operation op between successive elements of xs, going left to right and starting with z.
(xs :\ z)(op) Apply binary operation op between successive elements of xs, going right to left and starting with z.
xs.foldLeft(z)(op) Same as (z /: xs)(op).
xs.foldRight(z)(op) Same as (xs :\ z)(op).
xs reduceLeft op Apply binary operation op between successive elements of non-empty collection xs, going left to right.
xs reduceRight op Apply binary operation op between successive elements of non-empty collection xs, going right to left.
Specific Folds:
xs.sum The sum of the numeric element values of collection xs.
xs.product The product of the numeric element values of collection xs.
xs.min The minimum of the ordered element values of collection xs.
xs.max The maximum of the ordered element values of collection xs.
Strings:
xs addString (b, start, sep, end) Adds a string to StringBuilder b that shows all elements of xs between separators sep enclosed in strings start and endstartsepend are all optional.
xs mkString (start, sep, end) Converts the collection to a string that shows all elements of xs between separators sep enclosed in strings start and endstartsepend are all optional.
xs.stringPrefix The collection name at the beginning of the string returned from xs.toString.
Views:
xs.view Produces a view over xs.
xs view (from, to) Produces a view that represents the elements in some index range of xs.









本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/yjplxq/1428183,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
分布式计算 Java Scala
Scala:面向对象、Object、抽象类、内部类、特质Trait(二)
Scala:面向对象、Object、抽象类、内部类、特质Trait(二)
87 0
|
大数据 Scala 容器
【建议收藏】|3分钟让你学会Scala Trait 使用
Scala 是一种强大的静态类型编程语言,其中的 Trait 是一种重要的特性。Trait 可以被看作是一种包含方法和字段定义的模板,可以被其他类或 Trait 继承或混入。在本文中,我们将介绍 Scala Trait 的边界(Boundary)的概念,并展示如何使用它来限制 Trait 的使用范围。
257 11
|
Java Scala
scala面向对象编程之trait特质
特质就像是java的implement,是scala中代码复用的基础单元,它可以将方法和字段定义封装起来,然后添加到类中与类继承不一样的是,类继承要求每个类都只能继承一个超类,而一个类可以添加任意数量的特质。特质的定义和抽象类的定义很像,但它是使用trait关键字
115 0
scala面向对象编程之trait特质
|
大数据 编译器 Scala
大数据开发基础的编程语言的Scala的Trait
Scala是一种支持面向对象编程和函数式编程的编程语言,它提供了强大的Trait功能。本文将介绍Scala中Trait的概念和用法,帮助开发者更好地理解和应用这门语言。
94 0
|
设计模式 XML Java
基于Scala Trait的设计模式
基于Scala Trait的设计模式
|
Scala
Scala入门到精通——第十一节 Trait进阶
本节主要内容 trait构造顺序 trait与类的比较 提前定义与懒加载 trait扩展类 self type 1 trait构造顺序 在前一讲当中我们提到,对于不存在具体实现及字段的trait,它最终生成的字节码文件反编译后是等同于java中的接口,而对于存在具体实现及字段的trait,其字节码文件反编译后得到的java中的抽象类,它有着scala语言自己的实现方式
3553 0
|
Scala 索引 开发工具
|
Java Scala
scala 学习笔记(05) OOP(中)灵活的trait
trait -- 不仅仅只是接口! 接上回继续,scala是一个非常有想法的语言,从接口的设计上就可以发现它的与众不同。scala中与java的接口最接近的概念是trait,见下面的代码: package yjmyzz object App { def main(args...
946 0
|
Java 分布式计算 Spark
SCALA当的trait
不是特别懂,但感觉和RUBY当中的MIX-IN功能有几分相似,这又扯到了多重继承及JAVA当中的接口虚拟类了。。 package com.hengheng.scala class UseTrait { } trait Logger { def log(msg : Strin...
813 0