首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Protobuf-java:合并两个proto对象而不连接重复字段

Protobuf-java:合并两个proto对象而不连接重复字段
EN

Stack Overflow用户
提问于 2021-06-10 12:48:45
回答 1查看 1.6K关注 0票数 2

我希望合并两个相同类型的复杂proto对象protoAprotoB,如果在这两个对象中都设置了一个字段,则应该在得到的proto中设置protoB的值。

我可以使用.mergeFrom()函数:

代码语言:javascript
复制
protoA.toBuilder().mergeFrom(protoB).build()

但是根据文档,重复的字段将被连接起来。

mergeFrom(Message ):(仅用于构建器)将其他内容合并到此消息中,覆盖奇异标量字段,合并复合字段,并连接重复字段。

我不想要这种行为。是否有一种比手动设置每个重复字段更好的方法来做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2021-06-10 16:20:48

在protobuf的FieldMaskUtil中,有一个合并覆盖现有字段的选项。

它有一个MergeOptions,您可以在其中配置setReplaceRepeatedFields(true);,它将protoB合并到protoA中,当重复使用protoB字段时。

我会给你写一个例子:

代码语言:javascript
复制
FieldMaskUtil.MergeOptions options = 
      new FieldMaskUtil.MergeOptions().setReplaceRepeatedFields(true);

// Now we get all the names of the fields in your proto
List<String> names = YourObjectProto.YourObject.getDescriptor().getFields()
           .stream().map(Descriptors.FieldDescriptor::getName)
           .collect(Collectors.toList());

FieldMaskUtil.merge(FieldMaskUtil.fromStringList(names),
      protoB, protoA.toBuilder(),options);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67921459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档