-
Kotlin fold, reduce 메서드Kotlin/Kotlin 2024. 3. 10. 00:01728x90
Reduce 메서드
public inline fun <S, T : S> Iterable<T>.reduce(operation: (acc: S, T) -> S): S { val iterator = this.iterator() if (!iterator.hasNext()) throw UnsupportedOperationException("Empty collection can't be reduced.") var accumulator: S = iterator.next() while (iterator.hasNext()) { accumulator = operation(accumulator, iterator.next()) } return accumulator }
reduce 메서드의 경우 Iterable의 확장함수입니다.
초기값은 컬렉션의 첫 번째 요소이며 컬렉션을 순회하면서 operation을 지속적으로 수행합니다.
해당 컬렉션이 비어있으면 예외가 발생한다는 특징이 있습니다.
따라서 컬렉션이 비어있을 수 있다면 reduceOrNull을 활용하면 null을 반환하게 됩니다.
Reduce 메서드 실습
@Test fun `reduce를 학습해보자`(){ val numbers = (1..10).toList() val sumUsingReduce = numbers.reduce {total, num -> total + num } println(sumUsingReduce) // 55 val emptyList = emptyList<Long>() val emptyResult = emptyList.reduceOrNull{ total, num -> total + num } println(emptyResult) //null // java.lang.UnsupportedOperationException: Empty collection can't be reduced. emptyList.reduce{ total, num -> total + num } }
1부터 10까지의 정수가 담긴 List의 누적합을 더할 때 List의 첫 번째 요소를 초기값으로 활용합니다.
또한 reduceOrNull은 리스트가 비어있는경우 null을 반환하고 reduce를 사용한 경우에는 예외가 발생하게 됩니다.
Fold 메서드
public inline fun <T, R> Iterable<T>.fold(initial: R, operation: (acc: R, T) -> R): R { var accumulator = initial for (element in this) accumulator = operation(accumulator, element) return accumulator }
fold 메서드도 Iterable의 확장함수입니다.
초기값부터 시작하여 처음부터 끝까지 연산을 적용하여 값을 누적합니다.
컬렉션이 비어 있으면 지정된 초기 반환값을 반환합니다.
Fold 메서드 실습
@Test fun `fold를 학습해보자`(){ val numbers = (1..10).toList() // total의 초기값은 100으로 시작한다. // fold는 초기값을 지정할 수 있다!! val sumUsingFold = numbers.fold(100) { total, num -> total + num } println(sumUsingFold) // 155 val emptyList = emptyList<Int>() val emptyUsingFold = emptyList.fold(10){ total, num -> total + num } println(emptyUsingFold) // 10 }
1부터 10까지의 정수가 담긴 List의 누적합을 더할 때 초기값을 100으로 주면 155라는 결과가 나오게 됩니다.
또한 fold는 reduce와 다르게 리스트가 비어있는경우 초기값을 반환하게 됩니다.
728x90'Kotlin > Kotlin' 카테고리의 다른 글
kotlin enum 상태 관리 구현하기 (3) 2024.09.27 Kotlin takeIf와 takeUnless 함수 (1) 2024.03.13 Kotlin associateBy, groupBy 함수 (0) 2024.03.09 kotlin interface default method (0) 2024.03.05 kotlin delegated properties (0) 2024.03.01