[Kotlin] 컬렉션 API

jeunguri·2022년 9월 21일
0

kotlin

목록 보기
3/5

공식문서



filter

컬렉션을 이터레이션하면서 주어진 람다에 각 원소를 넘겨서 람다가 true를 반환하는 원소만 모은다. Filter의 결과는 입력 컬렉션의 원소 중에서 주어진 조건문에 만족하는 원소만으로 이루어진 새로운 컬렉션이다.

나이가 20살 이상인 사람만 뽑아내는 Person 리스트

val people = listOf(Person(“Jenny”, 27), Person(“Joy”, 15), Person(“Tom”, 19))
println(people.filter { it.age >= 20 })

>> Jenny, 27

하지만, filter는 원소를 변환할 수 없다. 원소를 변환하기 위해서는 map 함수를 사용해야 한다.





map

각 원소를 원하는 형태로 변환할 수 있고, 변환한 결과를 모아 새 컬렉션을 만든다. 결과는 원본 리스트와 원소 개수는 같지만, 각 원소는 주어진 함수(람다)에 따라 변환된 새로운 컬렉션이다.

Person 리스트가 아닌 name 리스트 출력하고 싶을 때

val people = listOf(Person(“Jenny”, 27), Person(“Joy”, 15), Person(“Tom”, 19))
println(people.map { it.name })

>> Jenny, Joym, Tom

map 함수에 멤버 참조 적용

people.map(Person::name)



all

컬렉션의 모든 원소가 조건을 만족하는지 판단

20살 미만인지 아닌지 판단

val under30 = {p:Person -> p.age < 20 }
Val people = listOf(Person(“Jenny”, 27), Person(“Joy”, 15), Person(“Tom”, 19))
println(people.all(under20))

>> [false]



any

컬렉션의 원소 중 조건을 만족하는 원소가 하나라도 있는지 판단

20살 미만인지 아닌지 판단

val under30 = {p:Person -> p.age < 20 }
val people = listOf(Person(“Jenny”, 27), Person(“Joy”, 15), Person(“Tom”, 19))
println(people.any(under20))

>> [true]



count

조건을 만족하는 원소의 개수를 반환

val under30 = {p:Person -> p.age < 20 }
Val people = listOf(Person(“Jenny”, 27), Person(“Joy”, 15), Person(“Tom”, 19))
println(people.count(under20))

>> [2]



forEach

컬렉션을 이터레이터하면서 주어진 코드를 수행시킨다.

val people = listOf(Person(“Jenny”, 27), Person(“Joy”, 15), Person(“Tom”, 19))

people.forEach {
    println(it.name)
}



onEach

forEach와 비슷하지만 onEach는 컬렉션이나 시퀀스를 다시 반환하기 때문에 메소드 연쇄 호출이 가능하다. forEach는 반환값이 Unit이므로 메소드 연쇄 호출이 불가능하다.

listOf(1,2,3,4,5).onEach { println(it) }.map( it * it }.joinToString(,)

>> [1,4,9,16,25]

0개의 댓글