Как обрабатывать элементы, которые прошли через фильтр при использовании Sequence в Kotlin - PullRequest
1 голос
/ 01 апреля 2019

Я хотел бы отфильтровать список и зарегистрировать элементы, которые прошли через фильтр, подобно этому:

val evenNumbers = (1..10)
            .filter { it % 2 == 0 }
            .onFallThrough { println("dropped $it") }  // wishful Kotlin
            .toList()

Это должно привести к следующему выводу:

dropped 1
dropped 3
dropped 5
dropped 7
dropped 9

а также все четные числа, собранные в списке evenNumbers.

Просматривая страницу руководства по Последовательности , я не смог найти ничего, что могло бы с этим справиться.Есть ли способ добиться этого в Котлине?

1 Ответ

5 голосов
/ 01 апреля 2019

Я бы использовал partition:

val evenNumbers = (1..10)
    .partition { it % 2 == 0 }
    .let {
        println("dropped ${it.second}")
        it.first
    }

Возвращает Pair со свойством first, содержащим все элементы, которые соответствуют условию, и свойством second, содержащим элементы, которые не совпадают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...