список каждый раз, когда он не нужен, а под ним оптимизируется с помощью

ли простое и эффективное решение для определения верхних n элементов Итерации Scala? Я имею в виду что-то вроде

iter.toList.sortBy(_.myAttr).take(2)

но без необходимости сортировки всех элементов, когда интерес представляют только два верхних элемента. В идеале я ищу что-то вроде

iter.top(2, _.myAttr)

см. также: Решение для верхнего элемента с использованием Ordering:В Scala, как использовать Ordering [T] с List.min или List.max и обеспечить читабельность кода

Обновить:

Спасибо всем за ваши решения. Наконец, я взял оригинальное решениенеизвестный пользователь и принял это использоватьIterable исутенер-мой-библиотека шаблон:

implicit def iterExt[A](iter: Iterable[A]) = new {
  def top[B](n: Int, f: A => B)(implicit ord: Ordering[B]): List[A] = {
    def updateSofar (sofar: List [A], el: A): List [A] = {
      //println (el + " - " + sofar)

      if (ord.compare(f(el), f(sofar.head)) > 0)
        (el :: sofar.tail).sortBy (f)
      else sofar
    }

    val (sofar, rest) = iter.splitAt(n)
    (sofar.toList.sortBy (f) /: rest) (updateSofar (_, _)).reverse
  }
}

case class A(s: String, i: Int)
val li = List (4, 3, 6, 7, 1, 2, 9, 5).map(i => A(i.toString(), i))
println(li.top(3, _.i))

Ответы на вопрос(9)

Ваш ответ на вопрос