加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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))
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读