Advertisement
Guest User

Untitled

a guest
Nov 28th, 2014
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 0.88 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] = {
  10.     val it = iter.iterator
  11.     new Iterator[A] {
  12.       var nextEl: Option[A] = None
  13.  
  14.       private def tryNext(): Unit = {
  15.         while (nextEl == None && it.hasNext) {
  16.           val res = it.next()
  17.           if (f(res)) {
  18.             nextEl = Some(res)
  19.           }
  20.         }
  21.       }
  22.  
  23.       override def hasNext: Boolean = {
  24.         tryNext()
  25.         nextEl.isDefined
  26.       }
  27.  
  28.       override def next(): A = {
  29.         tryNext()
  30.         if (nextEl == None) {
  31.           throw new NoSuchElementException
  32.         }
  33.         val Some(res) = nextEl
  34.         nextEl = None
  35.         res
  36.       }
  37.     }
  38.   }
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement