2012-04-24 3 views
3

Несколько комбинаций методов в коллекции могут быть выражены более лаконично в Scala. Например, xs.filter(f).headOption может быть выражен как xs.find(f), а xs.map.filter обычно может быть лучше выражен через xs.collect.Элегантный способ выразить xs.sort.head

Я нахожу, что пишу xs.sortWith(f).head, и это кажется мне похожим на то, что может быть выражено как один метод: «Найди мне наименьший элемент в этой коллекции, согласно этой функции сортировки».

Однако я не вижу очевидных методов на Seq или TraversableLike. Есть ли один метод, который отражает мои намерения, или .sort.head более элегантный способ найти «наименее» элемент?

ответ

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', конечно. Я искал другие функции, которые использовали 'A => A => Boolean' в соответствии с' sortWith', но это действительно не обязательно для моего использования. –

Смежные вопросы