Kotlin groupBy - 조건에 따라 리스트 원소 묶기
Notepad96
·2020. 12. 6. 06:23
1. groupBy
associate 함수는 List의 원소에서 두 값을 묶어서 Map의 <Key, Value> 타입으로 만들어 주었다.
groupBy 함수 또한 Map<Key, Value> 타입으로 만들어 주며
Key : group을 묶어줄 조건
Value : Key 조건에 만족하는 원소들 리스트
에 따라 값을 묶어줄 수 있다.
2. 코 드
환경 : Kotlin Version = 1.4.20, JVM
data class Book(var name: String, var writer: String, var price: Int)
fun main(args: Array<String>) {
val arr = mutableListOf<Book>()
arr.add(Book("name1", "writer1", 12000))
arr.add(Book("name2", "writer2", 21000))
arr.add(Book("name3", "writer3", 31000))
arr.add(Book("name4", "writer4", 28000))
arr.add(Book("name4", "writer5", 23000))
println("===============1================")
var arr2 = arr.groupBy { it.name }
arr2.forEach { println(it) }
println("===============2================")
val li = arr2["name4"]
if(li is List<Book>) li.forEach { println(it) }
var arr3 = listOf("One", "two", "Three", "four", "Five")
println("===============3================")
val arr4 = arr3.groupBy { it.first().toUpperCase() } // Key
arr4.forEach { println(it) }
println("===============4================")
val arr5 = arr3.groupBy( {it.first().toUpperCase()}, {it.toUpperCase()} ) // Key, Value
arr5.forEach { println(it) }
println("===============5================")
val arr6 = arr3.groupingBy { it.first().toUpperCase() }.eachCount()
arr6.forEach { println(it) }
}
ㄴ 1.
it.name 을 기준으로 group을 묶는다.
name4를 갖는 원소는 2개 존재하므로 이 원소들은 Key=name4의 Value로서 들어간다.
ㄴ 2.
Value는 List의 타입을 갖으며, 해당 예시에서는 List<Book> 타입을 갖는다.
ㄴ 3.
it.first().toUpperCase() 를 사용하여
각 원소의 첫글자를 대문자로 변환하여 이를 Key로 묶는다.
일치하는 원소들은 각각 Key에 해당하는 Value의 리스트로 들어간다.
ㄴ 4.
groupBy의 순서대로 Key, Value를 지정한다.
Key는 첫문자의 대문자로서 Group을 묶으며
Value는 대문자로 변환한 값이 추가되도록 만든다.
ㄴ 5.
groupingBy와 eachCount를 사용하여서 각 그룹에 개수를 Value로 갖는 Map형식을 만들어 낸다.
3. 참 조
'Kotlin > Collections' 카테고리의 다른 글
Kotlin Associate - Key, Value로 묶기 (0) | 2020.12.05 |
---|---|
Kotlin 중복 원소 제거 - distinct (0) | 2020.12.03 |
Kotlin PriorityQueue(우선순위 큐) (0) | 2020.12.03 |
Kotlin Deque(덱 or 디큐) (0) | 2020.12.02 |
Kotlin Pair, Triple Val cannot be reassigned - Pair 값 수정 (0) | 2020.12.02 |