Advertisement
Guest User

Untitled

a guest
Nov 28th, 2014
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 0.90 KB | None | 0 0
  1. /**
  2.  * Author: Evgeny Vanslov (evans@yandex-team.ru)
  3.  * Created: 28.11.14
  4.  */
  5. class Filter[A](iterable: Iterable[A], filter: (A) => Boolean) extends Iterable[A] {
  6.   private val iter = iterable
  7.   private val f = filter
  8.  
  9.   override def iterator: Iterator[A] = new FilterIterator(iter.iterator, f)
  10. }
  11.  
  12. class FilterIterator[A](iterator: Iterator[A], filter: (A) => Boolean) extends Iterator[A] {
  13.   val it = iterator
  14.   val f = filter
  15.   var nextEl: Option[A] = None
  16.  
  17.   private def tryNext(): Unit = {
  18.     while (nextEl == None && it.hasNext) {
  19.       val res = it.next()
  20.       if (f(res)) {
  21.         nextEl = Some(res)
  22.       }
  23.     }
  24.   }
  25.  
  26.   override def hasNext: Boolean = {
  27.     tryNext()
  28.     nextEl.isDefined
  29.   }
  30.  
  31.   override def next(): A = {
  32.     tryNext()
  33.     if (nextEl == None) {
  34.       throw new NoSuchElementException
  35.     }
  36.     val Some(res) = nextEl
  37.     nextEl = None
  38.     res
  39.   }
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement