- 안드로이드/kotlin
리스트를 이용한 다중 조건 정렬 sortedWith()
더모어더베러
2023. 7. 14. 15:05
단순한 단일 조건의 오름차순, 내림차순의 정렬이 아닌 2가지 이상의 조건으로 정렬을 하는 방법을 정리해 보겠습니다.
문자열을 요소로 가지고 있는 리스트를 아래의 조건으로 정렬해 보겠습니다.
정렬 조건 2가지
- 데이터의 길이가 짧은것 부터 정렬
- 길이가 같을때는 알파벳 순으로 정렬
다중 조건을 적용하려면 리스트 객체의 sortedWith()를 사용 합니다. 인자로 compareBy()를 사용할수도 있지만 Comparator를 재정의 하여 정렬조건을 적용해보겠습니다.
var list_string : List<String> = listOf("tom", "kim", "lina", "jeon", "holland")
val resultList = list_string.sortedWith(Comparator { a, b ->
// 글자수(length)를 우선조건으로 정렬한다.
// 글자수가 같을때는 a,b 아스키코드순 (알파벳순)으로 오름차순으로 정렬
// a가 b보다 작을때 -1을 반환하면 오름차순으로 정렬됨, 1을 반환하면 내림차순 정렬
when {
a.length < b.length -> -1
a.length == b.length -> when {
a < b -> -1
else -> 1
}
else -> 1
}
})
// resultList는 정렬된 새로운 객체를 리턴 받은 변수
print(resultList.toString())
조건문 when을 2번 사용하여 글자수, 글자수가 같을때는 알파벳순으로 정렬하였습니다. print문을 사용하여 출력한 값은 아래와 같습니다.
[kim, tom, jeon, lina, holland]
글자수를 적용후 글자수가 같을때는 알파벳순으로 정렬된 것을 확인할 수 있습니다.