Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

จัดเรียงคอลเล็กชันตามหลายฟิลด์ใน Kotlin


คอลเลกชัน เป็นวัตถุที่นักพัฒนาสามารถจัดกลุ่มวัตถุที่เกี่ยวข้องประเภทต่างๆ ไว้ในที่เดียว มีคอลเล็กชันหลายประเภทในไลบรารี Kotlin เช่น List, Array เป็นต้น

ในบทความนี้ เราจะมาดูกันว่าเราสามารถจัดเรียงคอลเลกชันตามคุณสมบัติต่างๆ ที่มีอยู่ในคอลเลกชันนั้นได้อย่างไร ในการทำเช่นนั้น เราจะได้รับความช่วยเหลือจากสองฟังก์ชันต่อไปนี้ที่มีให้โดยห้องสมุด Kotlin

  • sortedWith()

  • CompareBy()

sortedWith()

จัดเรียงด้วย() เป็นฟังก์ชันที่จัดเตรียมโดยไลบรารี Kotlin ที่ส่งคืนรายการองค์ประกอบทั้งหมดที่จัดเรียงโดยตัวเปรียบเทียบที่ระบุ ตามเอกสารทางการของ Kotlin คำจำกัดความของฟังก์ชันคือ

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

จัดเรียงด้วย() ใช้ตัวเปรียบเทียบเป็นอาร์กิวเมนต์และเปรียบเทียบคุณสมบัติที่กำหนดเองของแต่ละอ็อบเจ็กต์และเรียงลำดับเหมือนกัน

เปรียบเทียบโดย()

เปรียบเทียบโดย() มีหน้าที่สร้างตัวเปรียบเทียบที่เราจะส่งต่อไปยัง sortedWith() เพื่อจัดเรียงคุณสมบัติของวัตถุ ตามเอกสารของ Kotlin คำจำกัดความของฟังก์ชันจะเป็นดังนี้:

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

ตัวอย่าง

ในตัวอย่างต่อไปนี้ เราจะสร้างคลาส นักเรียน ซึ่งจะมีค่านิยมประเภทต่างๆ เช่น ชื่อนักเรียน อายุ และเกรดเฉลี่ยที่เกี่ยวข้อง เราต้องการเรียงลำดับเหมือนกันทั้งหมด ไม่ใช่เฉพาะ "อายุ" หรือ "เกรดเฉลี่ย"

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