sortedWith() 를 이용한 다중정렬
오름차순과 내림차순을 섞어 써본다.
map 의 key/value 쌍을 리스트로 만들어 다중정렬
@Test
fun sortedTest() {
val colorGroup = mutableMapOf<String, Int>().apply {
this["red"] = 555
this["blue"] = 77
this["yellow"] = 23
this["gray"] = 356
this["cyan"] = 555
}
// Int 기준으로 오름차순
val result1 = colorGroup.toList().sortedWith(compareByDescending { it.second }).map { it.first }
result1 shouldBe listOf("red", "cyan", "gray", "blue", "yellow")
// value 기준으로 내림차순, 동일 value 면 key 값 기준으로 오름차순 (알파벳)
val result2 = colorGroup.toList().sortedWith(compareByDescending<Pair<String, Int>> { it.second }.thenBy { it.first }).map { it.first }
result2 shouldBe listOf("cyan", "red", "gray", "blue", "yellow")
}
클래스를 요소로 가지는 리스트를 다중정렬
data class MyColor(
val name: String,
val count: Int
)
@Test
fun classSortedTest() {
val colorGroup = listOf<MyColor>(
MyColor("red", 555),
MyColor("blue", 77),
MyColor("yellow", 23),
MyColor("gray", 356),
MyColor("cyan", 555)
)
// count 기준으로 내림차순
val sortedByCount = colorGroup.sortedWith(compareByDescending { it.count }).map { it.name }
sortedByCount shouldBe listOf("red", "cyan", "gray", "blue", "yellow")
val sortedByCountAndColor = colorGroup.sortedWith(compareByDescending<MyColor> { it.count }.thenBy { it.name }).map { it.name }
sortedByCountAndColor shouldBe listOf("cyan", "red", "gray", "blue", "yellow")
}
추가적으로 thenBy 말고 thenByDescending 도 있다.
'jvm lang' 카테고리의 다른 글
2022-06-23 [kotlin] nullable 쓰다가 겪은 일. (0) | 2022.06.23 |
---|---|
20220125 [kotlin] objectMapper readValue to List (수정 : 24-05-26) (0) | 2022.01.25 |
20201108 [java8] java8InAction 읽기 & 기록 [ch10] (수정 : 2020-11-11) (0) | 2020.11.11 |
20201006 [java] annotation 작동 살피기 (0) | 2020.10.07 |
20200914 [java8/java11] windows 환경에서 자바버전 두 개 관리. (0) | 2020.09.14 |