безопасный Iterator.max - PullRequest
       8

безопасный Iterator.max

3 голосов
/ 02 сентября 2011

Существует ли библиотека, которая предлагает функцию, подобную Iterator.max, но которая возвращает Option[A], а не A для учета возможно пустых итераторов? Альтернативно, есть ли библиотека, которая предлагает класс PosInf[A] или около того, который примыкает к бесконечной положительной бесконечности к A?

(Очевидно, что любое из этих действий - простое занятие, но использование библиотеки почти всегда предпочтительнее дублирования кода.)

Ответы [ 2 ]

3 голосов
/ 02 сентября 2011

скалас : MA.maximum.Использование:

import scalaz._; import Scalaz._

List(1, 2, 3).maximum == Some(3)

List.empty[Int].maximum == None

единственная проблема заключается в том, что это не работает с итераторами напрямую, поэтому вам придется использовать вместо Stream (например, Iterator.toStream)

List(1, 2, 3).iterator.toStream.maximum = Some(3)
2 голосов
/ 02 сентября 2011

Я ничего не знаю, но это просто:

def maxOpt[T: Numeric](i: Iterator[T]) = if (i.hasNext) Some(i.max) else None

Редактировать: Числовое требование слишком строго, Порядок достаточно:

def maxOpt[T: Ordering](i: Iterator[T]) = if (i.hasNext) Some(i.max) else None

И если вы используетеisEmpty должно работать на любом подклассе TraversableOnce

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...