Computer >> Máy Tính >  >> Lập trình >> Android

Sắp xếp bộ sưu tập theo nhiều trường trong Kotlin

A Bộ sưu tập là một đối tượng mà các nhà phát triển có thể nhóm các loại đối tượng liên quan khác nhau vào một nơi. Có nhiều loại bộ sưu tập khác nhau có trong thư viện Kotlin như Danh sách, Mảng, v.v.

Trong bài viết này, chúng ta sẽ xem cách chúng ta có thể sắp xếp một tập hợp theo các thuộc tính khác nhau có bên trong tập hợp đó. Để làm được điều đó, chúng tôi sẽ nhờ đến sự trợ giúp của hai hàm sau do thư viện Kotlin cung cấp.

  • sortedWith ()

  • so sánhBy ()

sortedWith ()

sortedWith () là một hàm được cung cấp bởi thư viện Kotlin trả về danh sách tất cả các phần tử được sắp xếp theo một bộ so sánh được chỉ định. Theo tài liệu chính thức của Kotlin, định nghĩa hàm là,

fun <T> Array<out T>.sortedWith(
   comparator: Comparator<in T>
): List<T>

sortedWith () lấy một bộ so sánh làm đối số và so sánh các thuộc tính tùy chỉnh của từng đối tượng và sắp xếp giống nhau.

so sánhBy ()

CompareBy () chịu trách nhiệm tạo bộ so sánh mà chúng tôi sẽ chuyển đến sortedWith () để sắp xếp các thuộc tính đối tượng. Theo tài liệu Kotlin, định nghĩa hàm như sau:

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

Ví dụ

Trong ví dụ sau, chúng tôi sẽ tạo một lớp học Sinh viên sẽ chứa các loại giá trị khác nhau như tên học sinh, tuổi và điểm trung bình tương ứng. Chúng tôi muốn sắp xếp giống nhau về tổng thể, không chỉ theo "tuổi" hay "điểm trung bình".

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)

Đầu ra

Khi bạn thực thi mã, nó sẽ tạo ra kết quả sau -

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