【问题标题】:Elegant way to express xs.sort.head表达 xs.sort.head 的优雅方式
【发布时间】:2012-04-24 11:12:12
【问题描述】:

在 Scala 中可以更简洁地表达集合上的几种方法组合。例如xs.filter(f).headOption可以表示为xs.find(f),而xs.map.filter通常可以更好地表示为xs.collect

我发现自己在写xs.sortWith(f).head,这对我来说就像一种可以表达为单一方法的东西,“根据这个排序函数,在这个集合中找到最小的元素”。

但是,我在SeqTraversableLike 上看不到任何明显的方法。是否有一种方法可以捕捉到我的意图,或者.sort.head 是找到“最少”元素的更优雅的方法?

【问题讨论】:

    标签: scala collections


    【解决方案1】:
    scala> val xs = List("hello", "bye", "hi")
    xs: List[java.lang.String] = List(hello, bye, hi)
    
    scala> xs.sortWith(_.length < _.length).head
    res10: java.lang.String = hi
    
    scala> xs.min(Ordering.fromLessThan[String](_ > _))
    res11: java.lang.String = hi
    
    scala> xs.min(Ordering.by((_: String).length))
    res12: java.lang.String = hi
    
    scala> xs.minBy(_.length)
    res13: java.lang.String = hi
    

    【讨论】:

    • minBy,当然。我正在寻找根据sortWith 采用A =&gt; A =&gt; Boolean 的其他功能,但这对于我的用例来说确实不是必需的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    相关资源
    最近更新 更多