Kotlin Associate - Key, Value로 묶기

Notepad96

·

2020. 12. 5. 22:43

300x250

 

 

 

 

 


1. Association 

 

Association 함수를 사용하면 Map 형식의 <Key, Value>타입으로 값들을 묶어줄 수 있다.

 

 

 

만약 Class 타입을 담는 리스트가 있다.

 

여기서 특정 프로퍼티를 Key, Value로 선택하여 Map 형식으로 만들어 줄 수 있다.

 

 

 

 

Map 형식이기 때문에 중복된 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.associateBy { it.name }
    arr2.forEach { println(it) }


    println("===============2================")
    arr2.forEach { println(it.value.writer) }


    println("===============3================")
    val arr3 = arr.associateBy(Book::name, Book::writer)    // key to value
    arr3.forEach { println(it) }


    println("===============4================")
    val arr4 = arr.associate { it.writer to it.price }
    arr4.forEach { println("key = ${it.key}, value = ${it.value}") }
}

 

결 과

ㄴ 1.

associateBy { it.name }

 

it.name를 Key로, it = List의 Book원소를 Value로 Map을 만든다.

 

 

 

 

ㄴ 2. 

Value에는 리스트의 원소였던 Book 타입의 변수가 있으므로

 

name, writer, price와 같은 프로퍼티의 접근할 수 있다.

 

 

 

ㄴ 3.

associateBy( Book::name, Book::writer )

 

Book의 name을 Key로서, Book의 writer를 Value로서 Map 형식으로 만들어 반환 해준다.

 

 

 

ㄴ 4.

associate ( it.writer to it.price )

 

Book의 writer을 Key로서, Book의 price를 Value로서 Map 형식으로 만들어 반환 해준다.

 

 

 

 

 


3. 참 조

 

 

Collection Transformation Operations - Kotlin Programming Language

 

kotlinlang.org

 

 

 

300x250