728x90
반응형
여태까지 컬렉션을 for문으로 반복하여 포함된 아이템을 하나하나 꺼내어 사용했었다. 하지만 코틀린은 함수형 언어의 특징을 가지고 있기 때문에 좀 더 편리하게 컬렉션을 사용할 수 있다.
컬렉션 함수: list나 set, map과 같은 컬렉션 또는 배열에 일반 함수 또는 람다 함수 형태를 사용하여 for문 없이도 아이템을 순회하며 참조하거나 조건을 걸고, 구조의 변경까지 가능한 함수
forEach
: 컬렉션에 포함된 모든 아이템을 it이라는 변수로 순서대로 참조
collection.forEach{
println(it)
}
filter
: it에 조건을 걸어주면 조건에 맞는 객체만 collection으로 만들어서 반환
collection.filter{
it < 4
}
map
: it에 수식을 적용하여 값을 변경하고, 그 값을 컬렉션으로 만들어 반환
collection.map{
it * 2
}
any / all / none
collection.any{ it == 0 } // 하나라도 조건에 맞으면 true
collection.all{ it == 0 } // 모두 조건에 맞으면 true
collection.none{ it == 0 } // 하나도 조건에 맞지 않으면 true
first(find) / last(findLast)
일반 함수로 사용하는 경우: 컬렉션의 첫 번째 아이템 반환
collection.first()
람다 함수 형태로 사용하는 경우: it에 조건을 걸어주면 조건에 맞는 첫 번째 아이템을 반환 (last는 마지막 아이템을 반환)
collection.first{ it > 3 }
collection.last{ it > 3 }
first는 find 함수로, last는 findLast 함수로 대체할 수 있다.
first와 last 함수를 사용할 때 조건에 맞는 객체가 없는 경우 (=컬렉션이 비어있는 경우) : NoSuchElementException
→ firstOrNull, lastOrNull을 사용하면 객체가 없는 경우 null을 반환해 준다.
count
일반 함수로 사용하는 경우: 컬렉션의 모든 아이템의 개수 반환
collection.count()
람다 함수 형태로 사용하는 경우: 조건에 맞는 아이템의 개수 반환
collection.count{ it > 7 }
val nameList = listOf("박수영", "김지수", "김다현", "신유나", "김지우")
nameList.forEach{ print(it + " ") }
println()
println(nameList.filter{ it.startsWith("김") })
println(nameList.map{ "이름 : " + it })
println(nameList.any{ it == "김지연" })
println(nameList.all{ it.length == 3 })
println(nameList.none{ it.startsWith("이") })
println(nameList.first{ it.startsWith("김") })
println(nameList.last{ it.startsWith("김") })
println(nameList.count{ it.contains("지") })
// 출력 :
// 박수영 김지수 김다현 신유나 김지우
// [김지수, 김다현, 김지우]
// [이름 : 박수영, 이름 : 김지수, 이름 : 김다현, 이름 : 신유나, 이름 : 김지우]
// false
// true
// true
// 김지수
// 김지우
// 2
728x90
반응형
'Language > Kotlin' 카테고리의 다른 글
[Kotlin] 변수의 고급 기술 (상수, lateinit, lazy) (0) | 2023.09.25 |
---|---|
[Kotlin] 컬렉션 함수 (2) (0) | 2023.09.24 |
[Kotlin] 컬렉션(2) Set과 Map (0) | 2023.09.22 |
[Kotlin] Data Class와 Enum Class (0) | 2023.09.21 |
[Kotlin] 중첩클래스와 내부클래스 (0) | 2023.09.20 |