【发布时间】:2019-07-15 18:28:43
【问题描述】:
我正在寻找一种干净的方式来动态排序具有以下要求的列表。
case class Person(name: String, middleName:Option[String], age:Integer)
现在排序非常简单,但是如果这种排序是从用户执行列排序的 UI 驱动的,并且传递回服务器的参数将只是列名。有什么建议可以动态创建这种排序功能吗?
提前致谢
**更新:
val sortByName = (p :Person) => p.name
val sortByMiddleName = (p: Person) => p.middleName
val mySortMap = Map("name" -> sortByName, "middleName" -> sortByMiddleName)
val sorted = persons.sortBy(mySortMap("name"))
** 更新 #2
import scala.math.Ordering.Implicits._
type PersonSorter = (Person, Person) => Boolean
val sortByName: PersonSorter = (x:Person, y:Person) => x.name < y.name
// Implicits import takes care of the Option here...
val sortByMiddleName: PersonSorter = (x:Person, y:Person) => x.middleName < y.middleName
val sortingMap: PersonSorter = Map[String, PersonSorter]("name" -> sortByName, "middleName" -> sortByMiddleName)
(不包括年龄,但完全一样)
现在,当我有我的清单时,我可以轻松地做到这一点。
persons.sortWith(sortingMap("name"))
其中“name”是从 UI 传入的参数字符串。
【问题讨论】: