Inspectopedia Help

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