【scala初学】Trait Iterable

简介:

collections.png

   在scala集合的整个层级结构,Iterable仅次于Traverable

  (书生注:原句:All methods in this trait are defined in terms of an an abstract method, 个人根据上下文,这里应该多了一个“an”

   Iterable中的所有方法借助一个抽象方法的被定义,该方法是: iterator, 它用于一个一个的产生集合元素。 继承于Traversableforeach方法借助的iterator 实现如下:

1
2
3
4
def  foreach[U](f :  Elem  = > U) :  Unit  =  {
   val  it  =  iterator
   while  (it.hasNext) f(it.next())
}

Iterable的相当一部分子类都重写了标准的foreach方法,因为他们能够提供更有效的实现。谨记foreach是Traversable所有方法实现的基础,他决定性能好坏。


Iterator中有两个以上的方法返回迭代器iterators: grouped 和 sliding。 然而这些iterators,不返回单独的元素,而是返回原始集合元素的子序列。这些子序列最大尺寸会作为一个参数给出到这些方法中。grouped以“块”增量的方式返回他的元素,sliding产生一个滑动“window”贯穿所有元素。下面通过REPL【 书生:----读取-求值-输出”循环(英语:Read-Eval-Print Loop,简称REPL 】 的交互式,来让我们清楚的理解他们的区别:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
scala>  val  xs  =  List( 1 2 3 4 5 )
xs :  List[Int]  =  List( 1 2 3 4 5 )
scala>  val  git  =  xs grouped  3
git :  Iterator[List[Int]]  =  non-empty iterator
scala> git.next()
res 3 :  List[Int]  =  List( 1 2 3 )
scala> git.next()
res 4 :  List[Int]  =  List( 4 5 )
scala>  val  sit  =  xs sliding  3
sit :  Iterator[List[Int]]  =  non-empty iterator
scala> sit.next()
res 5 :  List[Int]  =  List( 1 2 3 )
scala> sit.next()
res 6 :  List[Int]  =  List( 2 3 4 )
scala> sit.next()
res 7 :  List[Int]  =  List( 3 4 5 )

只要迭代器可用,Trait iterable 能够增加一些其他有效的实现到Traversable.


Trait Iterable中的操作

WHAT IT IS WHAT IT DOES
Abstract Method:
xs.iterator 产生xs的任何元素的迭代器。与foreach遍历顺序相同
Other Iterators:
xs grouped size 一个迭代器,用于产生这个集合固定大小的“块”
xs sliding size 一个迭代器,用于产生该集合元素的一个滑动固定大小的窗口
Subcollections:
xs takeRight n xs最后n个元素组成的集合(又或者,如果没有顺序,返回任意n个元素)
xs dropRight n 除了 xs takeRight n  剩余的元素
Zippers:
xs zip ys 返回 Iterable[(AB)], 元素是 xs 和 ys中相应的元素对
xs zipAll (ys, x, y) 返回Iterable[(AB)]元素xs 和 ys中相应的元素对,较短的序列将会扩展用语匹配较长的序列,追加元素x 或者 y
xs.zipWithIndex 返回Iterable[(AInt)], 通过他们的索引位置,形成一对元素
Comparison:
xs sameElements ys 测试xs和ys以同样的顺序包含了同样的元素


在Trait Iterable下面的集成层次结构中,有三个Trait:  SeqSet, and Map三个接口有个共同点是都实现 PartialFunction接口的applyisDefinedAt方法然而,实现方式又略有不同。


对于序列(Seq), apply是位置索引,启示是0. 即:Seq(1,2,3)(1) 结果是2.  

对于Set, apply是对元素的测试 Set('a','b','c')('b')返回是true ,而Set()('a') 返回false. 

对于Map ,  例子如下: Map('a' -> 1, 'b' -> 10, 'c' -> 100)('b') 返回10











本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/yjplxq/1429182,如需转载请自行联系原作者
目录
相关文章
|
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