본문 바로가기
Back-End (web)

[Kotlin] Collection - associateBy, associateWith, associate

by 햄과함께 2021. 12. 30.
320x100

AssociateBy

collection 요소에 파라미터 함수에서 반환된 값을 키 값, 요소를 value로 하는 map을 반환한다.

data class Member(
    val no: Int,
    val name: String
)

fun main() {
    val members = listOf(
    	Member(no=10, name="A"),
    	Member(no=20, name="B"),
    	Member(no=30, name="C"),
    	Member(no=40, name="D"),
    	Member(no=50, name="E"),
    )
    val associateMembers = members.associateBy{it.no}
    println("""
    ${associateMembers::class.simpleName}
    keys : ${associateMembers.keys}
    values : ${associateMembers.values}
    ${associateMembers}
    """.trimIndent())
    
}

 

LinkedHashMap
keys : [10, 20, 30, 40, 50]
values : [Member(no=10, name=A), Member(no=20, name=B), Member(no=30, name=C), Member(no=40, name=D), Member(no=50, name=E)]
{10=Member(no=10, name=A), 20=Member(no=20, name=B), 30=Member(no=30, name=C), 40=Member(no=40, name=D), 50=Member(no=50, name=E)}

 

AssociateWith

collection 요소가 key이고 파라미터 함수에서 반환된 값을 value로 하는 Map을 반환한다.

data class Member(
    val no: Int,
    val name: String
)

fun main() {
    // associateBy
    val members = listOf(
    	Member(no=10, name="A"),
    	Member(no=20, name="B"),
    	Member(no=30, name="C"),
    	Member(no=40, name="D"),
    	Member(no=50, name="E"),
    )
    val associateMembers = members.associateWith{it.no}
    println("""
    ${associateMembers::class.simpleName}
    keys : ${associateMembers.keys}
    values : ${associateMembers.values}
    ${associateMembers}
    """.trimIndent())
}

 

LinkedHashMap
keys : [Member(no=10, name=A), Member(no=20, name=B), Member(no=30, name=C), Member(no=40, name=D), Member(no=50, name=E)]
values : [10, 20, 30, 40, 50]
{Member(no=10, name=A)=10, Member(no=20, name=B)=20, Member(no=30, name=C)=30, Member(no=40, name=D)=40, Member(no=50, name=E)=50}

Associate

collection 요소에 파라미터 함수에서 반환된 key-value pair 값으로 Map을 만들어 반환한다.

data class Member(
    val no: Int,
    val name: String
)

fun main() {
    val members = listOf(
    	Member(no=10, name="A"),
    	Member(no=20, name="B"),
    	Member(no=30, name="C"),
    	Member(no=40, name="D"),
    	Member(no=50, name="E"),
    )
    
    val associateMembers = members.associate{it.no to it.name}
    println("""
	${associateMembers::class.simpleName}
	keys : ${associateMembers.keys}
	values : ${associateMembers.values}
	${associateMembers}
    """.trimIndent())
    
}

 

LinkedHashMap
keys : [10, 20, 30, 40, 50]
values : [A, B, C, D, E]
{10=A, 20=B, 30=C, 40=D, 50=E}
320x100

댓글