320x100
참고 : https://kotlinlang.org/docs/collection-aggregate.html#fold-and-reduce
Fold와 Reduce는 컬렉션 요소들의 연산결과를 누적해서 다음 연산에서 사용한다.
차이점은 Reduce는 처음 연산 때 첫번째, 두번째 element를 가져와서 연산을 하는 반면, Fold는 init 인자와 첫번째 element를 가져와서 연산을 한다.
val list = listOf(1, 2, 3, 4, 5)
list.reduce { prev, ele ->
println("$prev, $ele")
(prev + ele)
}
// 1, 2
// 3, 3
// 6, 4
// 10, 5
list.fold(0) { prev, ele ->
println("$prev, $ele")
(prev + ele)
}
// 0, 1
// 1, 2
// 3, 3
// 6, 4
// 10, 5
Fold
listOf(1, 2, 3, 4, 5)
.fold(0) { prev, ele -> prev + ele } // 15
// 1 -> 3 -> 6 -> 10 -> 15
listOf(1, 2, 3, 4, 5)
.foldRight(0) { ele, prev -> prev + ele } // 15
// 5 -> 9 -> 12 -> 14 -> 15
0 based-index
listOf(1, 2, 3, 4, 5)
.foldIndexed(0) { idx, prev, ele ->
// 인덱스가 짝수면 더한다.
if (idx % 2 == 0) prev + ele
else prev
} // 9
// 1 -> 1 -> 4 -> 4 -> 9
listOf(1, 2, 3, 4, 5)
.foldRightIndexed(0) { idx, ele, prev ->
// 인덱스가 짝수면 더한다.
if (idx % 2 == 0) prev + ele
else prev
} // 9
// 5 -> 5 -> 8 -> 8 -> 9
Reduce
listOf(1, 2, 3, 4, 5)
.reduce { prev, ele -> prev + ele } // 15
// 3 -> 6 -> 10 -> 15
listOf(1, 2, 3, 4, 5)
.reduceRight { ele, prev -> prev + ele } // 15
// 9 -> 12 -> 14 -> 15
0 based-index
listOf(1, 2, 3, 4, 5)
.reduceIndexed { idx, prev, ele ->
// 인덱스가 짝수면 더한다.
if (idx % 2 == 0) prev + ele
else prev
} // 9
// 1 -> 4 -> 4 -> 9
listOf(1, 2, 3, 4, 5)
.reduceRightIndexed { idx, ele, prev ->
// 인덱스가 짝수면 더한다.
if (idx % 2 == 0) prev + ele
else prev
} // 9
// 5 -> 8 -> 8 -> 9
320x100
'Back-End (web)' 카테고리의 다른 글
[Spring] Spring Boot 3를 위한 RestDocs, openAPI3 버전 업그레이드 (0) | 2023.03.30 |
---|---|
[Spring] Spring Cloud Config 정리 (0) | 2022.05.15 |
PyCharm 입출력 파일 설정 (0) | 2022.01.08 |
[Kotlin] Collection - associateBy, associateWith, associate (0) | 2021.12.30 |
[Kotlin] Collection - all, any, count, find (0) | 2021.12.29 |
댓글