Android 개발/Kotlin
compareBy 와 min 그리고 sortedWith 사용방법에 대한 정리
Developer88
2023. 5. 10. 00:01
반응형
오늘은 리스트를 sorting 할 때 사용할 수 있는,
compareBy 와 min 그리고 sortedWith를 사용하는 방법에 대해서 정리해 보겠습니다.
1. 최소값을 찾을 때 2가지 조건을 붙이는 방법에 사용
먼저 CompareBy 와 min 을 사용하는 방법에 대해서 정리해 보겠습니다.
아래 코드에서 사용한 것은 minWithOrNull 인데요.
코드를 먼저 보고 정리해 보겠습니다.
compareBy에 두가지 조건 블록이 들어가 있습니다.
이 조건은 아래와 같이 적용됩니다.
- 먼저 value 가 적은 최소값을 찾고,
- 다음으로 id가 적은 값을 찾는다 입니다.
data class SampleData(val id: Int, val value: Int)
val dataList = listOf(
SampleData(1, 10),
SampleData(2, 15),
SampleData(3, 10),
SampleData(4, 7),
SampleData(5, 7)
)
val minElement = dataList.minWithOrNull(compareBy({ it.value }, { it.id }))
println(minElement)
광고
실행결과를 보겠습니다.
value 중에서 작은 것중, id가 가장 작은, id4의 객체가 결과로 출력되었습니다.
이렇게 여러개의 조건을 붙여줄 수 있는 것은,
compareBy 함수가 있기 때문인데요.
여러개의 프로퍼티를 가진 객체를 비교할 때 사용하기 좋습니다.
첫번째 인자로 넣어준 블록이 동일한 결과가 나오면,
2번째, 그래도 동일하면, 세번째 이런식으로 순차적으로 조건을 비교해 줍니다.
2. SortedWith 와 CompareBy 의 사용
Collection 을 Sort 해서 리턴해주는 CompareBy 와도 사용하기 정말 좋은 것이 CompareBy 인데요.
위에서와 마찬가지로, 첫번째 조건에서 동일한 값이 발견되면,
두번째 조건을 Sort 해 줍니다.
data class Student(val name: String, val score: Int, val age: Int)
val studentList = listOf(
Student("김군", 90, 20),
Student("박군", 85, 22),
Student("이군", 90, 19),
Student("정군", 85, 21)
)
val studentComparator = compareBy<Student>({ it.score }, { it.age })
val sortedList = studentList.sortedWith(studentComparator)
println(sortedList)
광고
결과는 다음과 같이,
점수가 가장 낮으면서도 나이가 어린 정군이 결과에 가장 먼저 나타나게 됩니다.
[Student(name=정군, score=85, age=21), Student(name=박군, score=85, age=22), Student(name=이군, score=90, age=19), Student(name=김군, score=90, age=20)]
이상으로, compareBy 와 min 그리고 sortedWith에 대해서 정리해 보았습니다.
728x90