У меня такая ситуация, как
class Ball {}
class WhiteBall : Ball {}
class BlackBall : Ball {}
val listOfBalls: List<Ball> = ...
Как элегантно получить первые шары из списка / массива, если, например, я взял <= 5 БЕЛЫХ ШАРОВ? </p>
Я знаю только так:
val NMAX = 5
var balls = 0
val listOfBalls: List<Ball> = ...
return listOfBalls.takeWhile { ball ->
if (ball is WhiteBall) balls++
return@takeWhile balls <= NMAX + 1
}
// пример выбора // B, B, B, B, B, W, W, W, B, B, ..., B, W, W
ОБНОВЛЕНИЕ: Кажется, я не очень четко описал, что хочу выбрать. Предположим, у нас есть 2 типа сущностей - AlbumTitle
и AlbumPicture
, которые образуют listOf<AlbumItem>(...)
.
Простой список содержит эти объекты в некотором порядке, например
- AlbumTitle, AlbumPicture , AlbumTitle, AlbumPicture , AlbumPicture
- AlbumTitle, AlbumTitle, AlbumTitle, AlbumPicture, AlbumPicture
Я хочу выбрать все объекты в том же порядке, но перестану заполнять мой новый список, когда я сделаю 2 снимка.
Поэтому я должен отфильтровать
- AlbumTitle, AlbumPicture , AlbumTitle, AlbumPicture
- AlbumTitle, AlbumTitle, AlbumTitle, AlbumPicture, AlbumPicture