Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Protobuf映射的排序_Java_Protocol Buffers_Proto3 - Fatal编程技术网

Java Protobuf映射的排序

Java Protobuf映射的排序,java,protocol-buffers,proto3,Java,Protocol Buffers,Proto3,我正在proto3中创建消息对象,并使用自动生成的java类。 我希望为每个消息对象分配唯一的密钥 message Obj { ... string unique_key = 1; ... } 在构建Obj的过程中,它从微服务接收一个名为metaData的原型对象,其定义如下: message metData { map<string, string> keyFields = 1; } 消息数据{ map keyFields=1; } 根据元数

我正在proto3中创建消息对象,并使用自动生成的java类。 我希望为每个消息对象分配唯一的密钥

message Obj {
    ...
    string unique_key = 1;
    ...
}
在构建
Obj
的过程中,它从微服务接收一个名为
metaData
的原型对象,其定义如下:

message metData {
     map<string, string> keyFields = 1;
}
消息数据{
map keyFields=1;
}
根据
元数据
对象中的条目,通过在映射上迭代并散列每个条目来创建
唯一密钥
关键字段中最多有10个条目


在protobuf文档中,无法定义键的顺序。如何保证不同的
元数据
对象在
关键字字段中具有相同的条目
生成相同的
唯一关键字

通常有两种选择:

  • 实现一个可交换的哈希函数。例如,获取密钥的哈希值,然后简单地求和,忽略溢出
  • 拿到钥匙,把它们分类。然后对它们进行哈希排序。如果有“多个”键,请考虑缓存哈希值。