选项 [T] 的最小/最大可能为空序列?

2023-12-19

我正在做一些 Scala 体操Seq[T]我试图在其中找到“最小”元素。这就是我现在所做的:

val leastOrNone = seq.reduceOption { (best, current) =>
    if (current.something < best.something) current
    else best
}

它工作得很好,但我不太满意 - 对于这么简单的事情来说有点长,而且我不太关心“如果” http://www.antiifcampaign.com/. Using minBy会更加优雅:

val least = seq.minBy(_.something)

... but min and minBy当序列为空时抛出异常。是否有一种惯用的、更优雅的方法来查找可能为空的列表中的最小元素作为Option?


seq.reduceOption(_ min _)

做你想要的吗?


编辑:这是一个包含您的示例_.something:

case class Foo(a: Int, b: Int)
val seq = Seq(Foo(1,1),Foo(2,0),Foo(0,3))
val ord = Ordering.by((_: Foo).b)
seq.reduceOption(ord.min)  //Option[Foo] = Some(Foo(2,0))

或者,作为通用方法:

def minOptionBy[A, B: Ordering](seq: Seq[A])(f: A => B) = 
  seq reduceOption Ordering.by(f).min

你可以用它来调用minOptionBy(seq)(_.something)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

选项 [T] 的最小/最大可能为空序列? 的相关文章

随机推荐