728x90
반응형
associateBy
: 아이템에서 key를 추출하여 map으로 변환하는 함수
name, birthYear 속성이 있는 객체들을 List에 넣어두었을 때
collection.associateBy{ it.name }
중괄호 안에 key로 사용할 속성의 이름을 넣어주면 자동으로 map으로 변환하여 반환한다.
groupBy
: key가 같은 아이템끼리 배열로 묶어 map으로 만드는 함수
collection.groupBy{ it.birthYear }
partition
: 아이템에 조건을 걸어 두 개의 컬렉션으로 나누어 줌
collection.partition{ it.birthYear > 2002 }
두 컬렉션은 두 객체를 담을 수 있는 Pair라는 클래스 객체로 반환되므로 각각의 컬렉션을 first, second로 참조하여 사용하면 된다.
또는 pair을 직접 담아줄 수 있도록 변수 이름을 괄호 안에 두 개 선언해준다.
val (over2002, under2002) = collection.partition{ it.birthYear > 2002 }
data class Person(val name: String, val birthYear: Int)
val personList = listOf(Person("유나", 1992),
Person("조이", 1996),
Person("츄", 1999),
Person("유나", 2003))
println(personList.associateBy{ it.birthYear })
println(personList.groupBy{ it.name })
val (over98, under98) = personList.partition{ it.birthYear > 1998 }println(over98)
println(under98)
// 출력 :
// {1992=Person(name=유나, birthYear=1992), 1996=Person(name=조이, birthYear=1996), 1999=Person(name=츄, birthYear=1999), 2003=Person(name=유나, birthYear=2003)}
// {유나=[Person(name=유나, birthYear=1992), Person(name=유나, birthYear=2003)], 조이=[Person(name=조이, birthYear=1996)], 츄=[Person(name=츄, birthYear=1999)]}
// [Person(name=츄, birthYear=1999), Person(name=유나, birthYear=2003)]
// [Person(name=유나, birthYear=1992), Person(name=조이, birthYear=1996)]
flatMap
: 아이템마다 만들어진 컬렉션을 합쳐서 반환하는 함수
collection.flatMap{
listOf(it * 3, it + 3)
}
[2, 3] → [6, 5, 9, 6]
getOrElse
: 인덱스 위치에 아이템이 있으면 아이템을 반환하고 아닌 경우 지정한 기본값을 반환하는 함수
collection.getOrElse(1){ 50 } // 인덱스 1번에 5가 있으므로 5 반환
collection.getOrElse(8){ 50 } // 인덱스 8번이 없으므로 50 반환
zip
: 컬렉션 두 개의 아이템을 1:1로 pair 클래스의 객체로 만들어 리스트에 넣어 반환
이 때 결과 리스트의 아이템의 개수는 더 작은 컬렉션을 따라가게 된다.
val numbers = listOf(-3, 8, 2, -10, 1)
println(numbers.flatMap{ listOf(it * 10, it + 10) })
println(numbers.getOrElse(1) { 50 })
println(numbers.getOrElse(10) { 50 })
val names = listOf("A", "B", "C", "D")
println(names zip numbers)
// 출력 :
// [-30, 7, 80, 18, 20, 12, -100, 0, 10, 11]
// 8
// 50
// [(A, -3), (B, 8), (C, 2), (D, -10)]
728x90
반응형
'Language > Kotlin' 카테고리의 다른 글
[Kotlin] 비트연산 (0) | 2023.09.25 |
---|---|
[Kotlin] 변수의 고급 기술 (상수, lateinit, lazy) (0) | 2023.09.25 |
[Kotlin] 컬렉션 함수 (1) (0) | 2023.09.22 |
[Kotlin] 컬렉션(2) Set과 Map (0) | 2023.09.22 |
[Kotlin] Data Class와 Enum Class (0) | 2023.09.21 |