兼职做猎头的网站,seo入门培训,seo网站关键词优化工具,免费做网站推广Scala迭代器模式处理数据
scala中创建集合需要内存#xff0c;集合与集合之间的转换时#xff0c;每次转换生成新的集合时#xff0c;新的集合也需要内存。如果有一个非常大的初始集合#xff0c;需要经过多次转换#xff0c;每次转换都生成一个新的集合#xff0c;才能…Scala迭代器模式处理数据
scala中创建集合需要内存集合与集合之间的转换时每次转换生成新的集合时新的集合也需要内存。如果有一个非常大的初始集合需要经过多次转换每次转换都生成一个新的集合才能得到最终的结果那么这时在集合转换过程中内存开销非常大。Scala迭代器模式处理数据很好的解决了内存占用大的问题。
Scala迭代器模式处理数据每次将集合的转换转变成了迭代器之间的转换迭代器是不需要占用内存存储的迭代器只是一个指针指向了最初的原始数据这样数据处理过程中内存占用非常小。
迭代器模式处理示例
//非迭代器模式处理浪费内存
val list1 List[String](hello java,hello python,hello scala)
val list2 list1.flatMap(one{one.split( )})
val list3 list2.map(one{one#})
list3.foreach(println)println(***********************)//迭代器模式处理内存小
val list List[String](hello java,hello python,hello scala)
val iter1 list.iterator
val iter2 iter1.flatMap(one{one.split( )})
val iter3 iter2.map(one{one#})
while(iter3.hasNext){val one iter3.next()println(one)}
Trait 特质特性
1、概念理解
Scala Trait(特质) 相当于java的接口实际上它比接口还功能强大。与接口不同的是它还可以定义属性和方法的实现。
一般情况下Scala的类可以继承多个Trait从结果来看就是实现了多重继承。第一个关键字使用extends之后使用with。
Trait特质定义的方法与类类似但它使用的关键字是trait。
2、举例trait中带属性带方法实现
注意
继承的多个trait中如果有同名的方法和属性必须使用“override”重新定义。
2、trait中不可以传参数
trait Read {val readType Readval gender mdef read(name:String){println(name is reading)}
}trait Listen {val listenType Listenval gender mdef listen(name:String){println(name is listenning)}
}class Person() extends Read with Listen {override val gender f
}object test {def main(args: Array[String]): Unit {val person new Person()person.read(lisi)person.listen(zhangsan)println(person.listenType)println(person.readType)println(person.gender)}}
3、举例trait中带方法不实现
1.object Lesson_Trait2 {
2. def main(args: Array[String]): Unit {
3. val p1 new Point(1,2)
4. val p2 new Point(1,3)
5. println(p1.isEqule(p2))
6. println(p1.isNotEqule(p2))
7. }
8.}
9.
10.trait Equle{
11. def isEqule(x:Any) :Boolean
12. def isNotEqule(x : Any) {
13. !isEqule(x)
14. }
15.}
16.
17.class Point(x:Int, y:Int) extends Equle {
18. val xx x
19. val yy y
20.
21. def isEqule(p:Any) {
22. p.isInstanceOf[Point] p.asInstanceOf[Point].xxxx
23. }
24.
25.}