Почему IntelliJ предлагает преобразовать цепочку вызовов в последовательность? - PullRequest
0 голосов
/ 18 сентября 2018

Предположим, что в следующем примере Kotlin сопоставляется исходный набор src с целевым набором dst:

private val src: Set<String> = setOf("hello", "world")
private val dst: Set<Int> = src.map { it.length }.toSet()

Это отлично работает. Однако проверка кода IntelliJ предлагает: Цепочка вызовов при сборе должна быть преобразована в 'Последовательность':

Call chain on collection should be converted into 'Sequence'

Применение этого предложения приводит к

private val dst: Set<Int> = src.asSequence().map { it.length }.toSet()

Какая польза от этого?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Set.map возвращает список, который вы сразу же выбрасываете после преобразования в набор.Преимущество asSequence состоит в том, что последовательность выполняет преобразование, предположительно без временного списка.

0 голосов
/ 18 сентября 2018

В этом случае предложение является неоптимальным. Правильный способ переписать этот код (который также не приводит к предупреждениям IntelliJ):

src.mapTo(hashSetOf()) { it.length }

Это позволит избежать создания промежуточного списка, который впоследствии будет преобразован в набор; данные будут сразу же добавлены в результирующий набор.

...