scala – 如何按字母顺序对Option [String]的case类进行排序,忽略None?

前端之家收集整理的这篇文章主要介绍了scala – 如何按字母顺序对Option [String]的case类进行排序,忽略None?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
给定List [Foo],其中Foo定义为:

case class Foo(bar: Option[String])

对于我来说,使用第一个按字母顺序找到Foo的最佳方法是什么?

例如,如果我有:

val l = List(Foo(None),Foo(Some("xyz")),Foo(Some("abc")))

我想返回Foo(Some(“abc”))

解决方法

list.filter(_.bar.isDefined) match {
      case Nil => Foo(None)
      case l => l.minBy(_.bar)
   }

或者,如果总会有至少一个非空选项,则只需list.filter(_.bar.isDefined).minBy(_.bar)

这(略微)比排序更好,因为它是线性的,并且不需要分配数据结构.

还有一种可能性,即甚至(一点点)更有效(但稍微更复杂)

list.reduceOption { 
    case (Foo(None),x) => x
    case (x,Foo(None)) => x
    case (Foo(Some(x)),Foo(Some(y))) => if ( x < y ) Foo(Some(x)) else Foo(Some(y))
}

猜你在找的Scala相关文章