我有一个
Seq
对象(protobuf 对象)。我想迭代列表,其中过滤特定字段值,并更新原始列表中的这些特定对象。
例如:
val serversProto = Seq(...)
serversProto = serversProto
.filter(server => server.registrationStatus == "REGISTERED")
.map(server =>
... update server object
)
上述问题是
serverProtos
现在是一个过滤列表ONLY包含与过滤器匹配的项目。我想要做的是更新 serversProto
中过滤器为 true 的项目,但保留所有其他原始项目。
这可能吗?
有几个选项,其中一个选项更容易理解,就像上面 Mateusz Kubuszok 所说的那样。
使用带有 IF - ELSE 的地图,
val withMap =serversProto.map(服务器 => if (server.registrationStatus == "已注册") { server.copy(name = s"${server.name}-更新") } 别的 { 服务器 } )
使用地图进行模式匹配
val withPatternMatch =serversProto.map { 案例服务器 if server.registrationStatus == "REGISTERED" => server.copy(name = s"${server.name}-更新") 案例服务器 => 服务器 }
使用收集
val withCollect =serversProto.collect { 案例服务器 if server.registrationStatus == "REGISTERED" => server.copy(name = s"${server.name}-更新") 案例服务器 => 服务器 }
但我建议不要使用。 3、因为它更干净、简单,而且在scala中更惯用