在 Kotlin 中按多个字段对集合进行排序

集合是一个对象,开发人员可以在其中将不同类型的相关对象分组到一个地方。Kotlin 库中存在不同类型的集合,例如 List、Array 等。

在本文中,我们将了解如何根据集合中存在的不同属性对集合进行排序。为此,我们将借助 Kotlin 库提供的以下两个函数。

  • sortedWith()

  • compareBy()

sortedWith()

sortedWith()是 Kotlin 库提供的一个函数,它返回按指定比较器排序的所有元素的列表。根据 Kotlin 官方文档,函数定义是,

fun <T> Array<out T>.sortedWith(

   comparator: Comparator<in T>

): List<T>

sortedWith()将比较器作为参数并比较每个对象的自定义属性并对其进行排序。

compareBy()

compareBy()负责创建我们将传递给的比较器,sortedWith()以便对对象属性进行排序。根据 Kotlin 文档,函数定义如下所示:

fun <T> compareBy(

   vararg selectors: (T) -> Comparable<*>?

): Comparator<T>

示例

在下面的示例中,我们将创建一个Student类,该类将保存不同类型的值,例如学生姓名、年龄和相应的 GPA。我们希望对整体进行排序,而不仅仅是“年龄”或“GPA”。

fun main()

{

   val studentA=Student("Student A",18,7.0)

   val studentB=Student("Student B",18,6.9)

   val studentC=Student("Student C",20,7.3)

   val studentD=Student("Student D",22,8.3)

   val studentsList=listOf(

      studentA,

      studentB,

      studentC,

      studentD

   );

   val sortedList=studentsList.sortedWith(

      compareBy(

         {it.age},

         {it.GPA}

      )

   )

   sortedList.forEach {

      println("name: ${it.name}, age: ${it.age}, GPA: ${it.GPA}")

   }

}

class Student(val name:String, val age:Int, val GPA: Double)

输出结果

执行代码后,它将生成以下输出 -

name: Student B, age: 18, GPA: 6.9

name: Student A, age: 18, GPA: 7.0

name: Student C, age: 20, GPA: 7.3

name: Student D, age: 22, GPA: 8.3

以上是 在 Kotlin 中按多个字段对集合进行排序 的全部内容, 来源链接: utcz.com/z/297067.html

回到顶部