-
我想把MutableMap中的一个值添加到总数中,但我一直得到类型不匹配:推断的类型是Int?但是Int是预期的错误,我不知道如何修复这个问题
-
我尝试将该值调用为Int
menu[item].toInt()
,并在if语句中设置逻辑,以检查该项是否确实为Int,但没有任何帮助。
请参阅下面的代码
fun main() {
val order = Order()
order.placeOrder("Noodles")
}
val menu: MutableMap<String, Int> = mutableMapOf("Noodles" to 10,
"Vegetables Chef's Choice" to 5,
)
class Order {
var total = 0
fun placeOrder(vararg orderedItems: String) {
for (item in orderedItems) {
if (item in menu) {
total += menu[item]
}
}
}
}
对menu[item]
的调用是定义为Map<K, out V>.get(key: K): V?
的menu.get(item)
的简写。
如果在映射中找不到具有指定键的元素,则返回null
。
如果返回值为空,您可以通过提供默认值来解决此问题,例如:
total += menu[item] ?: 0
Map<K, out V>
还提供了替代方案,其提供Int
而不是Int?
。当没有具有给定键的元素时,可以使用getValue(key: K): V
,它抛出NoSuchElementException
。或者,您可以使用getOrElse(key: K, defaultValue: () -> V): V
或getOrDefault(key: K, defaultValue: V): V
,它们都提供回退值而不是null。
以下不同备选方案的示例:
total += menu.getValue(item)
total += menu.getOrElse(item) { 0 }
total += menu.getOrDefault(item, 0)