컬렉션 처리 단계 수를 제한하라

컬렉션의 비용

모든 컬렉션 처리 메서드는 비용이 많이 듭니다.

내부적으로 요소들을 활용해 반복을 돌며, 추가적인 컬렉션을 만들어 사용하기도 합니다.

시퀀스도 시퀀스 전체를 랩 하는 객체가 만들어지며, 조작을 위해 또 다른 추가적인 객체를 만들어냅니다.

컬렉션의 처리의 단계 수

컬렉션과 시퀀스의 처리 수가 많다면 꽤 큰 비용이 들어갑니다.

어떤 메서드를 사용하는지에 따라서 컬렉션 처리의 단계 수가 달라집니다.

따라서 적절한 메서드를 활용해서 컬렉션 처리 단계 수를 적절하게 제한하는 것이 좋습니다.

이 코드보다는이 코드가 좋습니다.

.filter { it != null } .map { it }

.filterNotNull()

.map { Transformation } .filterNotNull()

.mapNotNull { Transformation }

.map { Transformation } .joinToString()

.joinToString { Transformation }

.filter { Predicate1 } .filter{ Predicate2 }

.filter { Predicate1 && Predicate2 }

.filter { it is Type } .map { it as Type }

.filterIsInstance()

.sortedBy { Key2 } .sortedBy { Key1 }

.sortedWith( compareBy({ Key1 }, { Key2 }) )

.listOf(…) .filterNotNull()

.listOfNotNull(…)

.withIndex() .filter { (index, element) -> Predicate using index } .map { it.value }

.filterIndexed { index, element -> Predicate using index }

Last updated