有序 Dynamo 地图结构? (不使用 marshalerl)
Ordered Dynamo Map Structure? (without using marshalerl)
在 Java 中是否有任何功能类似于 LinkedHashMap 的 Dynamo 结构,我不需要为其创建自定义编组器?
作为附带问题,Dynamo 中的列表排序是否正确?
DynamoDB supports the following types:
标量和标量集:N、NS、S、SS、B、BS、Null、布尔值
文档:地图、列表
有序地图不属于受支持的类型。如果将 Mapper 用于 LinkedHashMap,则需要创建自定义编组器。
列表顺序被保留。无法保证设置顺序。
您可以将保序映射表示为 key/value 对的列表:
[
{"key": "one", "value": ... },
{"key": "two", "value": ... },
...
]
无需借助自定义即可进行翻译相对容易 marshaller/unmarshaller:
@DynamoDBDocument
public class MapEntry {
private String key;
private Whatever value;
// constructor, getters and setters
}
@DynamoDBTable(tableName="whatever")
public class YourTable {
private LinkedHashMap<String, Whatever> map;
@DynamoDBIgnore // Don't store this directly or order will be lost
public LinkedHashMap<String, Whatever> getMap() {
return map;
}
public void setMap(LinkedHashMap<String, Whatever> map) {
this.map = map;
}
// mapper will save/load using these instead; convert between
// map and list of entries on the fly.
public List<MapEntry> getMapEntries() {
if (map == null) return null;
List<MapEntry> entries = new ArrayList<>(map.size());
for (Map.Entry<String, Whatever> entry : map.entrySet()) {
entries.add(new MapEntry(entry.getKey(), entry.getValue()));
}
return entries;
}
public void setMapEntries(List<MapEntry> entries) {
map = new LinkedHashMap<String, Whatever>();
for (MapEntry entry : entries) {
map.put(entry.getKey(), entry.getValue());
}
}
}
在 Java 中是否有任何功能类似于 LinkedHashMap 的 Dynamo 结构,我不需要为其创建自定义编组器?
作为附带问题,Dynamo 中的列表排序是否正确?
DynamoDB supports the following types:
标量和标量集:N、NS、S、SS、B、BS、Null、布尔值
文档:地图、列表
有序地图不属于受支持的类型。如果将 Mapper 用于 LinkedHashMap,则需要创建自定义编组器。
列表顺序被保留。无法保证设置顺序。
您可以将保序映射表示为 key/value 对的列表:
[
{"key": "one", "value": ... },
{"key": "two", "value": ... },
...
]
无需借助自定义即可进行翻译相对容易 marshaller/unmarshaller:
@DynamoDBDocument
public class MapEntry {
private String key;
private Whatever value;
// constructor, getters and setters
}
@DynamoDBTable(tableName="whatever")
public class YourTable {
private LinkedHashMap<String, Whatever> map;
@DynamoDBIgnore // Don't store this directly or order will be lost
public LinkedHashMap<String, Whatever> getMap() {
return map;
}
public void setMap(LinkedHashMap<String, Whatever> map) {
this.map = map;
}
// mapper will save/load using these instead; convert between
// map and list of entries on the fly.
public List<MapEntry> getMapEntries() {
if (map == null) return null;
List<MapEntry> entries = new ArrayList<>(map.size());
for (Map.Entry<String, Whatever> entry : map.entrySet()) {
entries.add(new MapEntry(entry.getKey(), entry.getValue()));
}
return entries;
}
public void setMapEntries(List<MapEntry> entries) {
map = new LinkedHashMap<String, Whatever>();
for (MapEntry entry : entries) {
map.put(entry.getKey(), entry.getValue());
}
}
}