728x90
컬렉션 처리 메서드는 비용이 많이 든다.
적절한 메서드를 활용해서, 컬렉션 처리 단계 수를 적절하게 제한하는 것이 좋다
// 비효율적인 코드
val result = listOf(1, 2, 3, 4, 5)
.map { it * 2 }
.filter { it > 3 }
.map { it + 1 }
.filter { it < 10 }
// 최적화된 코드
val result = listOf(1, 2, 3, 4, 5)
.map { it * 2 }
.mapNotNull { if (it > 3 && it < 10) it + 1 else null }
.filter { it != null } .map { it!! } |
.filterNotNull() |
.map { <Transformation> } .filterNotNull() |
.mapNotNull { <Transformation> } |
.map { <Transformation> } .joinToString() |
.joinToString { <Transformation> } |
.filter { <Predicate 1> } .filter { <Predicate 2> } |
.filter { <Predicate 1> && <Predicate 2> } |
.filter { it is Type } .map { it as Type } |
.filterIsInstance<Type>() |
.sortedBy { <Key 2> } .sortedBy { <Key 1> } |
.sortedWith(compareBy({ <Key 1> }, { <Key 2> })) |
listOf(...) .filterNotNull() |
listOfNotNull(...) |
.withIndex() .filter { (index, elem) -> <Predicate using index> } .map { it.value } |
.filterIndexed { index, elem -> <Predicate using index> } |
728x90
'공부 > 이펙티브코틀린' 카테고리의 다른 글
아이템 51 - 성능이 중요한 부분에는 기본 자료형 배열을 사용하라 (0) | 2024.08.18 |
---|---|
아이템 49 - 하나 이상의 처리 단계를 가진 경우네는 시퀀스를 사용하라 (0) | 2024.08.18 |
아이템 46 - 함수 타입 파라미터를 갖는 함수에 inline 한정자를 붙여라 (0) | 2024.08.16 |
아이템 44 - 멤버 확장 함수의 사용을 피하라 (0) | 2024.08.10 |
아이템 43 - API 의 필수적이지 않는 부분을 확장 함수로 추출하라 (0) | 2024.08.10 |
댓글