Kotlin기초 6

Tadap·2023년 10월 16일

Kotlin

목록 보기
6/6

Collection 변환

MAP

컬랙션을 바꿔준다.

val numbers = setOf(1, 2, 3)
numbers.map { it * 3 }
numbers.mapIndexed { idx, value -> value * idx }

위 경우 1, 2, 3 이 들어있는 Set을 변경한다.
2번째 줄 처럼 인덱스내 내용만 사용 가능하고,
몇번재인지 인덱스도 필요하다면 3번째 줄처럼 사용 가능하다
Null을 출력하고 싶지 않다면 NotNull을 뒤에 붙여주면 된다

numbers.mapNotNull
numbers.mapIndexedNotNull

이미 맵인 변환할 때에는 2가지 옵션이 존재하는데
numbersMap.mapKeys를 통해 Key를 가져오거나
numbersMap.mapValues를 통해 Value를 가져올 수 있다.

ZIP

ZIP은 동일한 요소를 줄이는 역할을 한다.

val colors = listOf("red", "brown", "grey")
val animals = listOf("fox", "bear", "wolf")
println(colors zip animals)

val twoAnimals = listOf("fox", "bear")
println(colors.zip(twoAnimals))

위 예시는는 두개의 리스트를 zip으로 줄이는걸 보여주는데 red,fox가 하나, brown, bear가 하나 이런식으로 묶인다.
뒤에 중괄호를 붙여서 원하는 방싞으로 묶을수도 있다.
반대로 unzip을 통해 묶여있는 요소를 풀을 수도 있다.

val numberPairs = listOf("one" to 1, "two" to 2, "three" to 3, "four" to 4)
println(numberPairs.unzip())

Associate

요소를 key, value로 반환

val numbers = listOf("one", "two", "three", "four")
println(numbers.associateWith { it.length })

위 경우 associateWith를 사용해서 key로 numbers내부 값을, value로 key의 길이를 넣는다.

val numbers = listOf("one", "two", "three", "four")

println(numbers.associateBy { it.first().uppercaseChar() })
println(numbers.associateBy(keySelector = { it.first().uppercaseChar() }, valueTransform = { it.length }))

위는 반대로 associateBy를 이용해서 요소를 value로 넣는다. 기본적으로 key를 정해주지만.
keySelector와 valueTransform을 이용해서 원하는 형태로 변형도 가능하다.

Flatten

중첩된 컬렉션을 위한 기능이다.

val numberSets = listOf(setOf(1, 2, 3), setOf(4, 5, 6), setOf(1, 2))
println(numberSets.flatten())

위처럼 numberSets에는 3개의 set이 있다. 이걸 flatten을 이용하여 하나로 합쳤다.

또 하나는 flatMap인데 이건 여러 컬렉션을 원하는 형식으로 합친다.

String representation

컬렉션 컨텐츠를 읽기 가능한 형태로 검색할 때 사용한다.

val numbers = listOf("one", "two", "three", "four")

println(numbers)         
println(numbers.joinToString())

val listString = StringBuffer("The list of numbers: ")
numbers.joinTo(listString)
println(listString)

저렇게 바로 출력을 하면
[] 안에 출력이 되는데
joinToStirng을 사용하면 괄호가 사라진다.
그리고 마지막은 joinTo를 사용하여 listString 문잔 뒤에 컬렉션을 출력한다.

JoinToString의 경우 seperator, prefix, postfix를 정할 수 있는데 이를 통해 원하는 형식으로 바꿀 수도 있고
limit, truncated를 통해 limit과 그 이후를 어떤식으로 표현 할 지도 정할 수 있다.
아니면 그냥 "Element: ${it.uppercase()}" 이런식으로 표현도 가능하다

0개의 댓글