java - 如何表示一个 HashMap
问题描述
我需要在协议缓冲区模式中包含以下类的实例作为字段:
public final class Metrics extends HashMap<Object, Double> {
}
但是当我添加类似的内容时:
map<bytes, double> metrics = 2;
我有效地得到了消息Map key cannot be float, double, bytes, message, or enum types
。
我想到的一种方法是将对象(键)转换为字节,然后转换为 base64 键以创建一个新映射,这将是要发送到线路的实际映射(然后在到达另一边)。但这似乎太昂贵了,我觉得我必须为每个条目创建一个输入流的实例(并关闭它们)。
这种情况有已知的方法吗?你会怎么做?我没有找到任何这样的例子。
谢谢
解决方案
您可以使用键值对列表来模拟映射(这是在 proto3 中引入映射并将它们反向移植到 proto2 之前完成的方式):
message Metric {
bytes key = 1;
double value = 2;
}
repeated Metric metrics = 2;
推荐阅读
- sql - SQLite 中的 CEIL 和 FLOOR
- javascript - 我的代码调用的 JQuery 事件(带选择器)
- python - Python glob:对格式[int]_[int]的文件进行排序,与windows名称排序相同
- reactjs - 使用 WebStorm 调试具有非标准结构的 NextJS 项目:“附加调试器。> 找不到页面目录”?
- angular - 使用 AWS Amplify 将文件上传到 S3 时获取上传进度状态
- python - Python RE re.split(),结果以空字符串开头
- python-3.x - 如何获取 ctypes-pointer 数据的格式字符串
- imagemagick - 无法使用带有 openEXR 的 ImageMagick 更改 EXR 文件的通道深度
- reactjs - DayPickerInput 限制日期选择
- python - 在 numpy 2darray 中逐行查找大于阈值的值的索引