【发布时间】:2023-03-14 13:34:01
【问题描述】:
是否有一个库提供像 Iterator.max 这样的函数,但它返回一个 Option[A] 而不是 A 来解释可能为空的迭代器?或者,是否有一个库提供PosInf[A] 或与A 相邻的正无穷大类?
(显然,这些都只是我自己的繁重工作,但使用库几乎总是比复制代码更可取。)
【问题讨论】:
是否有一个库提供像 Iterator.max 这样的函数,但它返回一个 Option[A] 而不是 A 来解释可能为空的迭代器?或者,是否有一个库提供PosInf[A] 或与A 相邻的正无穷大类?
(显然,这些都只是我自己的繁重工作,但使用库几乎总是比复制代码更可取。)
【问题讨论】:
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)
【讨论】:
我什么都不知道,但这很简单:
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 的任何子类
【讨论】: