класса и мне надо взять оттуда элемент определенного типа. Я использую такую конструкцию
val infoItem = items.firstOrNull { it is InfoItem } as InfoItem?
Вопрос, можно ли как то красивее это написать или такой вариант подойдет?
.filterIsInstance ?
fun <T, V> Collection<T>.firstOfOrNull(block: (T) -> V?): V? { forEach { elt -> block(elt)?.let { return it } } return null }
Я бы скомбинировал подход двух существующих методов (filterIsIntstance, firstOrNull) и написал свой экстеншн: inline fun <reified R> Iterable<*>.firstOfInstanceOrNull(): R? = firstOrNull { it is R } as R? fun main() { println(listOf(1, "asda", true).firstOfInstanceOrNull<Int>()) }
Обсуждают сегодня