我正在重构一些代码,作为中间步骤,我希望迭代X列表,并将每个元素类型强制转换为Y。以下是工作原理:
val xs: List<X>
for (x in xs) {
val y = x as Y
}但是我想知道如何组合迭代和类型转换,这样1)我不必引入变量x,2)我可以将这两行合并成一行。
我尝试过以下几种方法
val xs: List<X>
for ((y as Y) in xs) {
}
val xs: List<X>
for ((y in xs) as Y) {
}百无所成。多么?
发布于 2021-07-01 15:06:05
将迭代和类型转换合并到一行中:
val xs: List<X>
xs.forEach { it as Y
// Perform stuff on it
}发布于 2019-10-30 18:34:31
您可能想要这样做:
xs.map {it as Y}.forEach {
//do your stuff
}我想说这是一种非常好的语法,不需要任何额外的变量
发布于 2019-10-30 19:34:00
您可以通过强制转换为高阶函数来提取forEach:
inline fun <reified T> forEachCasted(iterable: Iterable<*>, action: (T) -> Unit) =
iterable.forEach { action(it as T) }并像这样使用它:
forEachCasted<Y>(xs) { ... }或者,您可以将forEachCasted作为扩展函数:
inline fun <reified T> Iterable<*>.forEachCasted(action: (T) -> Unit) =
forEach { action(it as T) }并这样使用它:
xs.forEachCasted<Y> { ... }https://stackoverflow.com/questions/58623228
复制相似问题