我想从可变地图中获取一个元素并对其进行操作
例如,我想更改他的名称值(地图上的元素将使用新值)
我想最后还给它
开始我写了一个工作代码,但它非常Java
var newAppKey: AppKey = null
val appKey = myMap(request.appKeyId)
if (appKey != null) {
newAppKey = appKey.copy(name = request.appKeyName)
myMap.put(appKey.name, newAppKey)
newAppKey
} else {
newAppKey = null
}
此代码有效,但它非常java。
我虽然喜欢
val newAppKey = appIdToApp(request.appKeyId) match {
case: Some(appKey) => appKey.copy(name = request.appKeyName)
case: None => None{AppKey}
}
不使用新值编译或更新myMap对象。
如何将其改进为scala概念。
答案 0 :(得分:1)
简单地:
val key = request.appKeyId
val newValueOpt = myMap.get(key).map(_.copy(name = request.appKeyName))
newValueOpt.foreach(myMap.update(key, _))
答案 1 :(得分:0)
您的代码中存在一些错误。
案例:一些(appKey)=> appKey.copy(name = request.appKeyName)
案例的这种语法不正确。它应该是
case Some(appKey) => appKey.copy(name = request.appKeyName)
此外,表达式的返回类型当前为Any
(Scala等效于Object),因为您的成功案例返回类型为对象的应用程序(appKey的类型),而失败案例返回None
,属于Option
类型。为了使事情保持一致,您的成功案例应该返回
Some(appKey.copy(name = request.appKeyName))
虽然有更好的方法来处理选项而不是模式匹配,但更正的代码将是
val newAppKey = appIdToApp(request.appKeyId) map (appKey =>
appKey.copy(name = request.appKeyName))