scala - 如何在多个字段上动态排序scala列表

原文 标签 scala sorting dynamic collections

我有一个案例课

case class Employee(name: String, age: Int, joinedDate: Instant)

我有一份员工名单
val employees: List[Employee]

拥有多名员工。

我想根据多个字段对列表进行排序,例如,当多个员工具有相同姓名时,排序应该按年龄排序,同样,当他们具有相同年龄时,排序应该在joinedDate 上,这意味着我需要多级排序。排序参数可以是任何顺序。

有一个sortBy scala中的方法,它对多列进行排序,即
employees.sortBy(e => (e.name, e.age)) .但这是静态的,我需要动态的。请注意,排序字段具有不同的数据类型,例如 Instant、Int 和 String。

这可以实现吗??

最佳答案

您可以建立一个 Ordering[Employee]动态的。例如。 :

val orderings = Map(
  "name" -> Ordering.by[Employee](_.name),
  "age" -> Ordering.by[Employee](_.age),
  "joinedDate" -> Ordering.by[Employee](_.joinedDate)
)

def orderingByColumns(columns: Seq[String]) = columns.map(orderings).reduce(_.orElse(_))

您可以调用 sorted 使用它并明确传递顺序:
employees.sorted(orderingByColumns(List("name", "age"))

将其扩展为处理降序列作为练习。

关于scala - 如何在多个字段上动态排序scala列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59412699/

相关文章:

c# - 为什么 Entity Framework 没有将我的集合加载到基类中?

javascript - 具有列定义查找的AngularJS动态表

scala - 在intellij的sbt项目中使用spark

java - 如何从 Scala 调用现有 Java 类实例的公共(public)静态方法?

go - 在Go中加载动态Yaml结构

java - 字母数字子类排序

php - MySQL查询以hms格式排序时间

scala - 如何在 "Scala"中按键减少 [Not In Spark]

scala - YARN 因超出内存限制而杀死容器

javascript - 在选择框中停止对HTML选项的自动排序