Kotlin groupBy - 조건에 따라 리스트 원소 묶기

Notepad96

·

2020. 12. 6. 06:23

300x250

 

 

 

 


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. 참 조

 

 

Grouping - Kotlin Programming Language

 

kotlinlang.org

 

300x250