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
相关产品推荐
相关产品推荐

