安全的Iterator.max

时间:2011-09-01 23:12:30

标签: scala iterator

是否有一个提供类似Iterator.max的函数的库,但它返回Option[A]而不是A来解释可能为空的迭代器?或者,是否有一个库提供了一个类PosInf[A]左右,它将正无穷大与A相邻?

(显然,这些中的任何一个都只是我自己的笨拙,但使用库几乎总是比复制代码更好。)

2 个答案:

答案 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

的任何子类