[英]Assign the result of this transformation with map to a variable with autocasting
我正在使用下一个代码:
private fun buildItemsList(navMenu: NavMenu?, appName: String): MutableList<Item> {
val items: MutableList<Item> = arrayListOf()
navMenu?.items?.map { item ->
when (item) {
is NavMenu -> items.add(buildMenuItem(item, appName))
is NavLink -> items.add(buildItem(item, appName))
else -> throw IllegalStateException("Unknown subtype ${item::class.simpleName} of NavMenu")
}
}
return items
}
我应该能够将结果分配给项目,而不是添加到项目列表中。 根据: https : //kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/map.html
就像是:
val items = navMenu?.items?.map { }
我对如何实现此目标有一些疑问,因为我正在使用自动广播(何时)。 有任何想法吗?
您可以执行以下操作:
private fun buildItemsList(navMenu: NavMenu?, appName: String): List<Item> {
if (navMenu == null || navMenu!!.items == null) {
return emptyList()
}
return navMenu!!.items!!.map { item ->
when (item) {
is NavMenu -> buildMenuItem(item, appName)
is NavLink -> buildItem(item, appName)
else -> throw IllegalStateException("Unknown subtype ${item::class.simpleName} of NavMenu")
}
}
}
要么
private fun buildItemsList(navMenu: NavMenu?, appName: String): List<Item> {
if (navMenu == null || navMenu!!.items == null) {
return emptyList()
}
return navMenu!!.items!!.filter { it is NavMenu }.map { buildMenuItem(it as NavMenu, appName) } +
navMenu!!.items!!.filter { it is NavLink }.map { buildItem(it as NavLink, appName) }
}
我对如何实现此目标有一些疑问,因为我正在使用自动广播。
注意:无需明确指定即可从上下文中推断出类型的事实在Kotlin中称为Smart Cast (不是自动转换)。
给定buildMenuItem
和buildItem
返回一个Item
您可以执行以下操作:
private fun buildItemsList(navMenu: NavMenu?, appName: String) = navMenu?.items?.map { item ->
when (item) {
is NavMenu -> buildMenuItem(item, appName)
is NavLink -> buildItem(item, appName)
else -> throw IllegalStateException("Unknown subtype ${item::class.simpleName} of NavMenu")
}
} ?: emptyList()
推断的返回类型将为List<Item>
。 如果需要可变列表,请添加toMutableList()
调用。
如果您需要使用filterIsInstance
分别过滤类型,则是一个好主意。
用法:
val l = listOf(1, 2, "Hello").filterIsInstance<String>()
l将为List<String>
类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.