Попробуйте filter
всех элементов, которые не нужны, а затем либо groupBy
, либо partition
их, например:
с использованием partition
(т.е. вам нужно только 2 списка из 1):
listSequence()
.filter { it.level > 0 && it.level != 3 } // it seems you are only interested in levels > 0 && != 3
.partition { it.level in 1..2 } // partition into items having 0 < level < 3 and the rest
.run(::println) // prints: [[Item(level=1), Item(level=2)], [Item(level=5)]] (which is a pair of lists)
с использованием groupBy
аналогично тому, что показал Вилли Ментцель:
listSequence()
.filter { it.level > 0 && it.level != 3 } // if you need to filter... otherwise skip that and assign just a random group
.groupBy {
when (it.level) {
in 1..2 -> 0
else -> 1
}
}
.values.run(::println) // which also prints ([Item(level=1), Item(level=2)], [Item(level=5)]) but now is a collection of lists
В обоих случаях я использовал следующую последовательность:
fun listSequence() = sequenceOf(Item(1), Item(2), Item(5), Item(-4), Item(0))
Зависит от того, что вы хотите достичь в конце ... Вас также могут заинтересовать некоторые другие доступные функции сбора .