1

假设我有一个书单

val books = List(Book)

在哪里Book(bookID: String, bookName: String)和地图

val scores = Map(bookID -> score:float)

我想先得到最高的书score,然后按字母顺序bookName

获得评分最高的书相当简单:

val bestBook = books.maxBy(x => score(x.bookID))

但如果多本书得分相同,我想按bookName. 我不确定如何添加第二个标准maxBy?我想我可以maxBy()先得分,然后我检索 的分数,并使用最高分数进行bestBook过滤,然后是?booksminBy()bookName

但这看起来真的很麻烦,有没有更有效的方法呢?我已经看到以前的线程与Ordering隐式执行类似的操作:Scala Ordering by multiple values,但我不知道如何Ordering在这种情况下定义。

4

1 回答 1

3

maxBy由较高的分数(感谢分数)和名称使用-

books
  .maxBy(b => (-score(b.bookId), b.name))

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

于 2021-10-23T09:31:02.083 回答