Call chain on collection could be converted into 'Sequence' to improve performance
Reports call chain on a Collection
that should be converted into Sequence.
Each Collection
transforming function (such as map()
or filter()
) creates a new Collection
(typically List
or Set
) under the hood. In case of multiple consequent calls, and a huge number of items in Collection
, memory traffic might be significant. In such a case, using Sequence
is preferred.
Example:
class Entity(val key: String, val value: String)
fun getValues(lines: List<String>) = lines
.filter { it.isNotEmpty() }
.map { it.split(',', limit = 2) }
.filter { it.size == 2 }
.map { Entity(it[0], it[1]) }
The quick-fix wraps call chain into asSequence()
and toList()
:
class Entity(val key: String, val value: String)
fun getValues(lines: List<String>) = lines
.asSequence()
.filter { it.isNotEmpty() }
.map { it.split(',', limit = 2) }
.filter { it.size == 2 }
.map { Entity(it[0], it[1]) }
.toList()
Inspection options
Option | Type | Default |
---|---|---|
Call chain length to transform | Number | 5 |
Inspection Details | |
---|---|
Available in: | IntelliJ IDEA 2023.3, Qodana for JVM 2023.3 |
Plugin: | Kotlin, @snapshot@ |
Last modified: 13 July 2023