반응형
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
+
(vararg of lambdas 복용) 트릭을 수행하십시오.
val sortedList = list.sortedWith(compareBy({ it.age }, { it.name }))
다소 간결한 호출 가능 참조 구문을 사용할 수도 있습니다.
val sortedList = list.sortedWith(compareBy(Person::age, Person::name))
로 목록을 정렬하는 데 사용하십시오
Comparator
.그런 다음 몇 가지 방법을 사용하여 비교기를 구성 할 수 있습니다.
-
,
콜들의 체인의 비교기를 구성 :
list.sortedWith(compareBy<Person> { it.age }.thenBy { it.name }.thenBy { it.address })
-
여러 기능을 수행하는 과부하가 있습니다.
list.sortedWith(compareBy({ it.age }, { it.name }, { it.address }))
참고 URL :
https://stackoverflow.com/questions/37259159/sort-collection-by-multiple-fields-in-kotlin
반응형
'Programing' 카테고리의 다른 글
Spring의 디스패처 서블릿은 무엇입니까? (0) | 2020.05.23 |
---|---|
Ruby 클래스가 다른 클래스의 서브 클래스인지 테스트 (0) | 2020.05.22 |
ASP.NET 4.5가 웹 서버에 등록되지 않았습니다 (0) | 2020.05.22 |
i = (i, ++ i, 1) + 1은 무엇입니까? (0) | 2020.05.22 |
Eclipse 디버거에서 Step Into와 Step Over의 차이점은 무엇입니까? (0) | 2020.05.22 |