2012-04-24 42 views
3

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

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

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

回答

13
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 
+0

'minBy',当然。我正在寻找按照'sortWith'采用'A => A => Boolean'的其他函数,但这对我的用例来说并不是必需的。 – 2012-04-24 11:29:19