Kotlin에서는 Collection 객체들의 사용이 더욱 쉽도록 도와주는 함수들이 있다.
이를테면 map, filter.. 등이 있는데
Java Stream에 대응되는 함수들이다.
fun main() {
val list = listOf(1, 2, 3, 4, 5)
val sqaureList = list.map { it * it }
print(sqaureList) // [1, 4, 9, 26, 25]
}
fun main() {
val list = listOf(1, 2, 3, 4, 5, 6)
val filterList = list.filter { it % 2 == 0 }
print(filterList) // [2, 4, 6]
}
fun main() {
val names = listOf("Alice", "Bob", "Charlie")
names.forEach { println(it) }
}
fun main() {
val numbers = listOf(1, 2, 3, 4, 5)
val sum = numbers.reduce { acc, num -> acc + num }
println("result > $sum") // result > 15
}
fun main() {
val numbers = listOf(1, 2, 3)
val result = numbers.fold(10) { acc, num -> acc + num }
println(result) // 16
}
fun main() {
val list = listOf(1, 2, 3, 4, 5)
val result = list.find { it % 2 == 0 }
println(result) // 2
}
fun main() {
val list = listOf("abcde", "abc", "abdefg")
val group = list.groupBy { it.length }
println(group) // {5=[abcde], 3=[abc], 6=[abdefg]}
}
특정 조건을 기준으로 그룹화도 가능하지만 이 경우는 아래 'partition' 함수 사용을 권장
data class Person(val name: String, val age: Int)
fun main() {
val people = listOf(
Person("Alice", 30),
Person("Bob", 25),
Person("Charlie", 35)
)
val sortedByAge = people.sortedBy { it.age }
println(sortedByAge) // [Person(name=Bob, age=25), Person(name=Alice, age=30), Person(name=Charlie, age=35)]
}
fun main() {
val list = listOf(1, 2, 3, 4, 5, 6)
val (evens, odds) = list.partition { it % 2 == 0 }
println(evens) // [2, 4, 6]
println(odds) // [1, 3, 5]
}
find 는 첫 요소 하나만 반환
takeWhile은 조건을 만족하는 요소 모두를 반환