maxBy() List()中对象的多个属性



假设我有一个图书列表

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

如果需要,可以使用元组上相同的排序。

最新更新