是否有一个提供类似Iterator.max
的函数的库,但它返回Option[A]
而不是A
来解释可能为空的迭代器?或者,是否有一个库提供了一个类PosInf[A]
左右,它将正无穷大与A
相邻?
(显然,这些中的任何一个都只是我自己的笨拙,但使用库几乎总是比复制代码更好。)
答案 0 :(得分:3)
scalaz :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)
答案 1 :(得分:2)
我不知道什么,但这很简单:
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