티스토리 뷰

반응형
SMALL

1. 매핑 함수

map(), mapIndexed()

map() 함수는 forEach() 함수와 유사합니다. 집합 객체의 데이터 수만큼 반복하여 실행하는 것을 동일하나 forEach()와는 다르게 반환값이 있다는 점입니다. forEach()는 단순히 반복 실행만 하지만 map()은 반복실행 한 후 결과 값을 반환합니다.

val list = listOf<Int>(12, 8, 9, 20)
list.filter { it > 10 }
       .map { it * 10 }
       .forEach { println(it) }

결과는 120, 200이 출력됩니다.

val list = listOf<Int>(12, 8, 9, 20)
list.filter { it > 10 }
       .map { it * 10 }
       .map { println(it) }

위 코드 역시 결과는 동일합니다. 

 

mapIndexed() 함수는 map() 함수와 동일하지만 람다 함수에 인덱스까지 전달해주는 함수입니다.

listOf(1, 2, 3).mapIndexed { index, data -> index * data }
			   .forEach { println(it) }

위 함수는 각 인덱스와 값을 곱하여 리스트를 반환하고 그 리스트의 각 값을 forEach 함수를 통해 print해주는 함수입니다.

class User(val name: String, val age: Int)

fun main(args: Array<String>) {

    val list = listOf<User>(User("kim", 25), User("lee", 28), User("kim", 25))
    list.groupBy { it.age }
        .forEach {
            println("key : ${it.key} ... count : ${it.value.count()}")
            it.value.forEach { println("${it.name} .. ${it.age}") }
        }
}

위 코드는 age를 기준으로 동일한 age값을 가진 데이터들을 그룹화하여 개수를 출력해주는 함수입니다.

25와 28을 key 값으로 하여 결과를 Map 타입으로 반환합니다.

 

2. 요소 함수

contains()

contains() 함수는 컬렉션 타입의 데이터 중 특정 데이터가 있는지 판단하는 함수로써 있으면 true, 없으면 false를 반환합니다.

val result = listOf(2, 5, 10, 8).contains(7)
println("contains test : $result")

elementAt(), elementAtOrElse(), elementAtOrNull()

elementAt() 함수는 특정 위치의 데이터를 반환하는 함수입니다.

val result = listOf(2, 5, 10, 8).elementAt(2)
println("elementAt test : $result")

위의 함수는 인덱스가 2인 값 즉, 3번째 데이터 (인덱스는 0, 1, 2, 3이므로) 가 반환됩니다.

하지만 주어지는 인덱스 값이 리스트의 크기보다 커질 경우 IndexOutOfBoundsException 예외가 발생합니다.

이를 방지해줄 수 있는 elementAtOrElse() 함수가 있습니다. 

이 함수는 입력된 인덱스 값이 리스트의 크기보다 커질 경우 주어진 람다 함수를 실행하여 반환된 값을 반환하게 됩니다.

val result = listOf(2, 5, 10, 8).elementAtOrElse(5, { 0 })
println("elementAtOrElse Test : $result")

인덱스가 초과되었으므로 출력 값은 0이 됩니다.

 

first(), firstOrNull(), last(), lastOrNull()

first() 함수는 조건에 맞는 데이터 중 첫번째 데이터를 반환해주는 함수입니다.

var result = listOf(2, 5, 10, 8).first { it % 5 == 0 }
println("print test : $result")

출력 값은 5가 됩니다.

last() 함수는 first() 함수와 정반대로 동작하는 함수입니다.

조건에 맞는 데이터 중 마지막 데이터를 반환해주는 함수입니다.

 

만약 조건에 맞는 데이터가 하나도 없을 경우에는 NoSuchElementException이 발생합니다.

이 경우에 null을 반환해주는 함수가 바로 firstOrNull(), lastOrNull() 입니다.

 

indexOf(), indexOfFirst(), indexOfLast()

indexOf() 함수는 매개 변수로 전달받은 데이터가 위치하는 인덱스의 첫 번째 값을 반환해주는 함수입니다.

var result = listOf(2, 5, 10, 2).indexOf(2)
println("indexOf test : $result")

위 코드의 반환 값은 0이 됩니다 (2가 첫 번째 위치에 있으므로)

 

indexOfFirst()와 indexOfLast()는 indexOf와는 다르게 람다 함수를 매개 변수로 받는 함수입니다.

var result = listOf(2, 5, 10, 2).indexOfFirst { it % 2 == 0 }
println("indexOfFirst test : $result")

정렬 함수

reserved()

reserved()함수는 데이터의 순서를 거꾸로 바꿀 때 사용하는 함수입니다.

listOf(1, 5, 2).reserved().forEach { println(it) }

출력값 : 2, 5, 1

sorted(), sortedBy(), sortedDescending(), sortedDescendingBy()

sorted() 함수는 정렬을 목적으로 사용하는 함수입니다.

listOf(1, 5, 2).sorted().forEach { println(it) }

출력값 : 1, 2, 5

listOf("lee", "kim", "park").sorted().forEach { println(it) }

출력값 : kim, lee, park

 

sortedBy() 함수는 람다 함수를 대입할 수 있고 람다 함수의 결과 값을 대상으로 정렬하는 함수입니다.

listOf(1, 3, 2).sortedBy { it % 3 }.forEach { println(it) }

각 데이터를 나눈 나머지를 기준으로 정렬하는 코드입니다.

출력값 : 3, 1, 2

 

sortedDescending(), sortedDescendingBy()

위 함수는 sorted함수에서 정렬 순서가 역순인 함수입니다. 큰 수에서 작은 수 순서로, z에서 a 순서로 정렬됩니다.

 

 

 

 

 

반응형
LIST
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함