Scala Iterator/Stream with Known Size -


i have scala iterator (i can use either datatype comfortably purpose) i've cast seq. i'd keep around until i'm ready it, i'd able size of in o(1). wondering if there built-in way of setting things allow me keep hold of iterator size on iterable object.

your best bet wrap in iterator, if can pay cost of indirection.

class sizediterator[a](underlying: iterator[a], val initalsize: int) extends iterator[a] {   def next = underlying.next   def hasnext = underlying.hasnext } 

and then

new sizediterator(myseq.iterator, myseq.length) 

keep in mind, however, if map or whatever new sizediterator end plain iterator , no longer know how long initialsize was.

also keep in mind won't know how of iterator consumed, initialsize upper bound on size, when use there might none left.

alternatively, can

myseq.iterator.zipwithindex.map{ case (x,i) => (x, myseq.length-1) }.take(myseq.length) 

to produce iterator pairs of element , number of elements left (including one--you'll never hit 0 way).

if want known size tell in o(1), .length method on seq cast iterable resolve fast method have when seq--this whole point of overriding methods--and therefore won't (usually) consume new iterator each time. requires keep iterable around, not iterator.


Comments