Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Sắp xếp Collection theo nhiều trường trong Kotlin

Giới thiệu

Collection là đối tượng cho phép nhóm các đối tượng liên quan khác nhau vào một nơi. Kotlin cung cấp nhiều loại collection như List, Array, v.v.

Bài viết này trình bày cách sắp xếp một collection theo nhiều thuộc tính (trường) của đối tượng bên trong collection đó. Chúng ta sẽ sử dụng hai hàm hỗ trợ từ thư viện Kotlin:

  • sortedWith()
  • compareBy()

Hàm sortedWith()

sortedWith() trả về danh sách các phần tử được sắp xếp theo một Comparator chỉ định. Định nghĩa theo tài liệu:

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

Hàm nhận một comparator 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 để sắp xếp.

Hàm compareBy()

compareBy() tạo ra comparator sẽ truyền cho sortedWith() để sắp xếp các thuộc tính đối tượng. Định nghĩa:

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

Ví dụ minh họa

Tạo class Student chứa tên, tuổi, GPA. Muốn sắp xếp theo tuổi trước, sau đó theo 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)

Kết quả

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

Các sinh viên cùng tuổi (18) được sắp xếp tiếp theo theo GPA tăng dần.