Programing

Kotlin에서 여러 필드로 컬렉션 정렬

crosscheck 2020. 5. 22. 23:47
반응형

Kotlin에서 여러 필드로 컬렉션 정렬


이 질문에는 이미 답변이 있습니다.

나이별로 정렬 한 다음 이름별로 정렬해야하는 사람 목록이 있다고 가정하겠습니다. C # 배경에서 온 LINQ를 사용하여 이러한 언어로 쉽게 달성 할 수 있습니다.

var list=new List<Person>();
list.Add(new Person(25, "Tom"));
list.Add(new Person(25, "Dave"));
list.Add(new Person(20, "Kate"));
list.Add(new Person(20, "Alice"));

//will produce: Alice, Kate, Dave, Tom
var sortedList=list.OrderBy(person => person.Age).ThenBy(person => person.Name).ToList(); 

Kotlin을 사용하여 어떻게 이것을 달성합니까?이것은 내가 시도한 것입니다 (첫 번째 "sortedBy"절의 출력이 두 번째 항목에 의해 재정의되어 이름순으로 정렬 된 목록이 생성되므로 분명히 잘못되었습니다)

val sortedList = ArrayList(list.sortedBy { it.age }.sortedBy { it.name })) //wrong

sortedWith

+

compareBy

(vararg of lambdas 복용) 트릭을 수행하십시오.

val sortedList = list.sortedWith(compareBy({ it.age }, { it.name }))

다소 간결한 호출 가능 참조 구문을 사용할 수도 있습니다.

val sortedList = list.sortedWith(compareBy(Person::age, Person::name))

 

sortedWith

로 목록을 정렬하는 데 사용하십시오

Comparator

.그런 다음 몇 가지 방법을 사용하여 비교기를 구성 할 수 있습니다.

  • compareBy

    ,

    thenBy

    콜들의 체인의 비교기를 구성 :
    list.sortedWith(compareBy<Person> { it.age }.thenBy { it.name }.thenBy { it.address })
    
  • compareBy

    여러 기능을 수행하는 과부하가 있습니다.
    list.sortedWith(compareBy({ it.age }, { it.name }, { it.address }))
    

참고 URL :

https://stackoverflow.com/questions/37259159/sort-collection-by-multiple-fields-in-kotlin

반응형