Kotlin (코틀린)
Kotlin in A..Z - Aggregate Operation
강태종
2020. 11. 28. 15:52
any()
Collection에 하나라도 있으면 true
=> 만족하는 하나를 찾을때까지 검사한다.
fun main() {
val list0 = listOf<Int>()
println(list0.any())
val list1 = listOf(1, 2, 3)
println(list1.any())
val list2 = listOf(1, 2, 3, 1, 2, 3)
list2.any {
println(it)
it == 3
}
}
false
true
1
2
3
all()
모든 원소가 일치하면 true
=> 전부다 검사하거나, 중간에 일치하지 않는 원소가 있으면 끝난다.
fun main() {
val list0 = listOf<Int>()
println(list0.all { it > 0 })
val list1 = listOf(1, 2, 3)
println(list1.all { it > 2 })
val list3 = listOf(1, 2, 3, 1, 2, 3)
list3.all {
println(it)
it > 0
}
}
true
false
1
2
3
1
2
3
count
일치하는 원소의 갯수를 반환한다.
=> 처음부터 끝까지 검사한다.
fun main() {
val array = arrayOf(1, 2, 3)
println(array.count())
println(array.count {
println(it)
it > 2
})
}
3
1
2
3
1
fold
왼쪽에서 오른쪽으로 진행하며 연산을 수행하는 함수이다.
fun main() {
val array = arrayOf(1, 2, 3, 4, 5)
println(array.fold(0) { acc, i ->
println("ACC : $acc, I : $i")
acc + i
})
}
ACC : 0, I : 1
ACC : 1, I : 2
ACC : 3, I : 3
ACC : 6, I : 4
ACC : 10, I : 5
15
foldRight
fold의 반대방향
fun main() {
val array = arrayOf(1, 2, 3, 4, 5)
println(array.foldRight(0) { acc, i ->
println("ACC : $acc, I : $i")
acc + i
})
}
ACC : 5, I : 0
ACC : 4, I : 5
ACC : 3, I : 9
ACC : 2, I : 12
ACC : 1, I : 14
15
forEach
모든 원소를 접근하며 action을 실행한다.
fun main() {
val list = listOf(1, 2, 3)
list.forEach {
println(it)
}
}
1
2
3
forEachIndexed
forEach에 Index를 추가한 버전
fun main() {
val list = listOf(1, 2, 3)
list.forEachIndexed { index, value ->
println("Index : $index => Value : $value")
}
}
Index : 0 => Value : 1
Index : 1 => Value : 2
Index : 2 => Value : 3
maxOf
특정한 값에 대한 최대값
data class Node(
var index: Int,
var dist: Long
)
fun main() {
val list = listOf(Node(0, 2), Node(1, 4), Node(2, 0), Node(-1, 4))
println(list.maxOf { it.dist })
}
4
maxOfWith
maxOf에 Comparator을 지정할 수 있다.
data class Node(
var index: Int,
var dist: Long
)
fun main() {
val list = listOf(Node(0, 2), Node(1, 4), Node(2, 0), Node(-1, 4))
println(list.maxOf { it.dist })
println(list.maxOfWith(compareBy({it.dist}, {-it.index}), {it}))
}
4
Node(index=-1, dist=4)
none
조건에 만족하는 요소가 없으면 true
=> 처음부터 확인하고 조건에 만족하는 요소가 있으면 false를 반환하며 종료
fun main() {
val list = listOf(1, 2, 3)
println(list.none {
println(it)
it < 0}
)
}
1
2
3
true
reduce
fold와 비슷하지만 초기값이 원소의 첫번째 값이다.
fun main() {
val list = listOf(1, 2, 3)
println(list.reduce { acc, i ->
acc + i
})
}
6