- 안드로이드/kotlin

리스트를 이용한 다중 조건 정렬 sortedWith()

더모어더베러 2023. 7. 14. 15:05

단순한 단일 조건의 오름차순, 내림차순의 정렬이 아닌 2가지 이상의 조건으로 정렬을 하는 방법을 정리해 보겠습니다.

 

문자열을 요소로 가지고 있는 리스트를 아래의 조건으로 정렬해 보겠습니다.

 

정렬 조건 2가지

  1. 데이터의 길이가 짧은것 부터 정렬
  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]

 

글자수를 적용후 글자수가 같을때는 알파벳순으로 정렬된 것을 확인할 수 있습니다.