Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Author: Evgeny Vanslov (evans@yandex-team.ru)
- * Created: 28.11.14
- */
- class Filter[A](iterable: Iterable[A], filter: (A) => Boolean) extends Iterable[A] {
- private val iter = iterable
- private val f = filter
- override def iterator: Iterator[A] = new FilterIterator(iter.iterator, f)
- }
- class FilterIterator[A](iterator: Iterator[A], filter: (A) => Boolean) extends Iterator[A] {
- val it = iterator
- val f = filter
- var nextEl: Option[A] = None
- private def tryNext(): Unit = {
- while (nextEl == None && it.hasNext) {
- val res = it.next()
- if (f(res)) {
- nextEl = Some(res)
- }
- }
- }
- override def hasNext: Boolean = {
- tryNext()
- nextEl.isDefined
- }
- override def next(): A = {
- tryNext()
- if (nextEl == None) {
- throw new NoSuchElementException
- }
- val Some(res) = nextEl
- nextEl = None
- res
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement