在 Scala 中,如何使用过滤器更新 Seq 中的特定项目?

问题描述 投票:0回答:1

我有一个

Seq
对象(protobuf 对象)。我想迭代列表,其中过滤特定字段值,并更新原始列表中的这些特定对象。

例如:

val serversProto = Seq(...)

serversProto = serversProto
  .filter(server => server.registrationStatus == "REGISTERED")
  .map(server => 
    ... update server object
  )

上述问题是

serverProtos
现在是一个过滤列表ONLY包含与过滤器匹配的项目。我想要做的是更新
serversProto
中过滤器为 true 的项目,但保留所有其他原始项目。

这可能吗?

scala dictionary filter sequence
1个回答
0
投票

有几个选项,其中一个选项更容易理解,就像上面 Mateusz Kubuszok 所说的那样。

  1. 使用带有 IF - ELSE 的地图,

    val withMap =serversProto.map(服务器 => if (server.registrationStatus == "已注册") { server.copy(name = s"${server.name}-更新") } 别的 { 服务器 } )

  2. 使用地图进行模式匹配

    val withPatternMatch =serversProto.map { 案例服务器 if server.registrationStatus == "REGISTERED" => server.copy(name = s"${server.name}-更新") 案例服务器 => 服务器 }

  3. 使用收集

    val withCollect =serversProto.collect { 案例服务器 if server.registrationStatus == "REGISTERED" => server.copy(name = s"${server.name}-更新") 案例服务器 => 服务器 }

但我建议不要使用。 3、因为它更干净、简单,而且在scala中更惯用

© www.soinside.com 2019 - 2024. All rights reserved.