What is the difference between the methods iterator and view?

前端 未结 3 768
[愿得一人]
[愿得一人] 2020-12-05 02:58
scala> (1 to 10).iterator.map{_ * 2}.toList
res1: List[Int] = List(2, 4, 6, 8, 10, 12, 14, 16, 18, 20)

scala> (1 to 10).view.map{_ * 2}.force
res2: Seq[Int] =         


        
3条回答
  •  既然无缘
    2020-12-05 03:01

    There's a huge difference between iterators and views. Iterators are use once only, compute on demand, while views are use multiple times, recompute each time, but only the elements needed. For instance:

    scala> val list = List(1,2,3).map{x => println(x); x * 2}
    1
    2
    3
    list: List[Int] = List(2, 4, 6)
    
    scala> list(2)
    res14: Int = 6
    
    scala> list(2)
    res15: Int = 6
    
    scala> val view = List(1,2,3).view.map{x => println(x); x * 2}
    view: scala.collection.SeqView[Int,Seq[_]] = SeqViewM(...)
    
    scala> view(2)
    3
    res12: Int = 6
    
    scala> view(2)
    3
    res13: Int = 6
    
    scala> val iterator = List(1,2,3).iterator.map{x => println(x); x * 2}
    iterator: Iterator[Int] = non-empty iterator
    
    scala> iterator.drop(2).next
    1
    2
    3
    res16: Int = 6
    
    scala> iterator.drop(2).next
    [Iterator.next] (Iterator.scala:29)
    (access lastException for the full trace)
    

提交回复
热议问题