[Kotlin] 컬렉션 함수(2) 설명 & 예제

728x90

그 외 컬렉션 함수 설명

  1. associateBy

    • 아이템에서 key를 추출하여 map으로 변환하는 함수
    • collection.associateBy { it.name }
      • key로 사용할 name을 걸어준다 -> 자동으로 map 으로 변환하여 반환
  2. groupBy

    • key가 같은 아이템끼리 배열로 묶어 map 으로 만드는 함수
    • collection.groupBy { it.birthYear }
      • 특정한 값이 같은 객체를 배열로 묶어 반환
  3. partition

    • 조건을 걸어 true, false 나눠준다
    • collection.partition { it.birthYear > 2002 }
      • 두 컬렉션은 Pair라는 객체로 반환 -> frist, second 로 참조
      • val (over2002, under2002) = collection.partiton { it.birthYear > 2002 } 각각의 변수 이름으로도 받을 수 있다.

예제

fun main() {

    data class Person(val name: String, val birthYear: Int)

    val personList = listOf(
        Person("유나", 1992),
        Person("조이", 1996),
        Person("츄", 1999),
        Person("유나", 2003)
    )

    //{1992=Person(name=유나, birthYear=1992), 1996=Person(name=조이, birthYear=1996), 1999=Person(name=츄, birthYear=1999), 2003=Person(name=유나, birthYear=2003)}
    println(personList.associateBy { it.birthYear })

    //{유나=[Person(name=유나, birthYear=1992), Person(name=유나, birthYear=2003)], 조이=[Person(name=조이, birthYear=1996)], 츄=[Person(name=츄, birthYear=1999)]}
    println(personList.groupBy { it.name })

    val (over98, under98) = personList.partition { it.birthYear > 1998 }

    //[Person(name=츄, birthYear=1999), Person(name=유나, birthYear=2003)]
    println(over98)

    //[Person(name=유나, birthYear=1992), Person(name=조이, birthYear=1996)]
    println(under98)

}
  1. flatMap

    • 아이템마다 만들어진 컬렉션을 합쳐서 반환하는 함수
    • collection.flatMap { listOf(it * 3, it + 3 }
  2. getOrElse

    • 인덱스 위치에 아이템이 있으면 아이템을 반환하고 아닌 경우 지정한 기본값을 반환
    • collection.getOrElse(1) { 50 }
  3. zip

    • 컬렉션 두개의 아이템을 1:1로 매칭하여 새 컬렉션을 만들어 줌
    • Pair 클래스에 넣어 -> List에 넣어 반환

예제

fun main() {

    val numbers = listOf(-3, 7, 2, -10, 1)

    //[-30, 7, 70, 17, 20, 12, -100, 0, 10, 11]
    //list 새로 만들어 반환
    println(numbers.flatMap { listOf(it * 10, it + 10) })

    println(numbers.getOrElse(1) { 50 }) //7
    println(numbers.getOrElse(10) { 50 }) //50

    val names = listOf("A", "B", "C", "D")

    //[(A, -3), (B, 7), (C, 2), (D, -10)]
    println(names zip numbers)

}
728x90

댓글

Designed by JB FACTORY