Computer >> 컴퓨터 >  >> 프로그램 작성 >> Android

Kotlin에서 여러 필드를 기준으로 컬렉션 정렬

<시간/>

컬렉션 개발자가 여러 유형의 관련 개체를 한 곳에서 그룹화할 수 있는 개체입니다. List, Array 등과 같은 Kotlin 라이브러리에는 다양한 종류의 컬렉션이 있습니다.

이 기사에서는 컬렉션 내부에 있는 다양한 속성별로 컬렉션을 정렬하는 방법을 살펴보겠습니다. 이를 위해 Kotlin 라이브러리에서 제공하는 다음 두 가지 기능의 도움을 받을 것입니다.

  • sortedWith()

  • 비교 기준()

sortedWith()

sortedWith() 지정된 비교기로 정렬된 모든 요소의 목록을 반환하는 Kotlin 라이브러리에서 제공하는 함수입니다. 공식 Kotlin 문서에 따르면 함수 정의는 다음과 같습니다.

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

sortedWith() 비교자를 인수로 사용하여 각 개체의 사용자 정의 속성을 비교하고 동일하게 정렬합니다.

비교 기준()

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