假设我有一个图书列表
val books = List(Book)
whereBook(bookID: String, bookName: String)
and a map
val scores = Map(bookID -> score:float)
我想先获得score
最高的书,然后按字母顺序获得bookName
获得评分最高的书很简单:
val bestBook = books.maxBy(x => score(x.bookID))
但是,如果有多本书具有相同的分数,那么我想按bookName
排序。我不确定如何添加第二个标准maxBy
?我想我可以先maxBy()
的分数,然后我检索bestBook
的分数,并用最大分数过滤books
,然后minBy()
bookName
?
但是这看起来很麻烦,有没有更有效的方法?我以前见过类似Ordering
隐式的线程:Scala按多值排序,但我不知道如何在这种情况下定义Ordering
。
使用较高分数的maxBy
(感谢分数上的-
)和名称:
books
.maxBy(b => (-score(b.bookId), b.name))
如果需要,可以使用元组上相同的排序。