You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala中如何通过过滤条件更新Seq中的指定元素?

解决Protobuf Seq的条件更新并保留所有元素

你原来的代码用了filter+map,会把不满足registrationStatus == "REGISTERED"的元素直接过滤掉,所以最终只留下更新后的匹配元素。要实现更新符合条件的元素,同时保留所有原始元素的需求,直接用map遍历每个元素并做条件判断就可以了,不需要先过滤。

因为Protobuf对象是不可变的,更新时需要通过toBuilder创建修改后的新对象,示例代码如下:

val serversProto = Seq(...)

// 遍历每个元素,符合条件则更新,否则保留原对象
val updatedServers = serversProto.map { server =>
  if (server.registrationStatus == "REGISTERED") {
    // 这里写你的更新逻辑,比如修改某个字段
    server.toBuilder
      .setLastUpdatedTimestamp(System.currentTimeMillis())
      .setStatus("ACTIVE")
      .build()
  } else {
    server // 不符合条件,直接返回原对象
  }
}

这样处理后,updatedServers会包含原列表的所有元素,其中满足条件的元素被更新,其余元素保持原样。

内容的提问来源于stack exchange,提问作者Kris Rice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 22:32:34