scala – 如何按字母顺序对Option [String]的case类进行排序,忽
发布时间:2020-12-16 18:08:09 所属栏目:安全 来源:网络整理
导读:给定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.
给定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)) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |