비교 및 추천

메서드 사용 목적 장점 단점
sorted 기본 정렬 (순서 정의된 타입) 간단하고 직관적 기본 Ordering만 사용 가능
sortBy 특정 속성(키)을 기준으로 정렬 가독성이 높고 명확한 기준 제공 다중 기준 정렬이 불편할 수 있음
sortWith 사용자 정의 비교 함수 제공 고도로 유연한 정렬 가능 비교 함수가 복잡할 경우 비가독성

1. sorted

리스트의 요소가 Ordering 타입 클래스(예: Int, String)를 구현하고 있다면 기본 정렬 순서로 정렬할 수 있습니다.

val numbers = List(3, 1, 4, 1, 5, 9)
val sortedNumbers = numbers.sorted
println(sortedNumbers) // List(1, 1, 3, 4, 5, 9)

val words = List("banana", "apple", "cherry")
val sortedWords = words.sorted
println(sortedWords) // List(apple, banana, cherry)

2. sortBy

특정 속성(키)을 기준으로 정렬할 때 사용합니다.

case class Person(name: String, age: Int)

val people = List(Person("Alice", 25), Person("Bob", 20), Person("Charlie", 30))

// 나이로 정렬
val sortedByAge = people.sortBy(_.age)
println(sortedByAge)
// List(Person(Bob,20), Person(Alice,25), Person(Charlie,30))

// 이름으로 정렬
val sortedByName = people.sortBy(_.name)
println(sortedByName)
// List(Person(Alice,25), Person(Bob,20), Person(Charlie,30))

3. sortWith

두 요소를 비교하는 사용자 정의 함수를 제공하여 정렬할 수 있습니다.

val numbers = List(3, 1, 4, 1, 5, 9)

// 내림차순 정렬
val descending = numbers.sortWith(_ > _)
println(descending) // List(9, 5, 4, 3, 1, 1)

// 문자열 길이로 정렬
val words = List("banana", "apple", "cherry")
val sortedByLength = words.sortWith(_.length < _.length)
println(sortedByLength) // List(apple, cherry, banana)

추가 예제

1. 복합 기준으로 정렬 (다중 키 정렬)

val people = List(Person("Alice", 25), Person("Bob", 25), Person("Charlie", 20))

// 나이로 정렬, 나이가 같으면 이름으로 정렬
val sorted = people.sortBy(p => (p.age, p.name))
println(sorted)
// List(Person(Charlie,20), Person(Alice,25), Person(Bob,25))