是否有任何Dynamo结构的功能类似于Java中的LinkedHashMap,我不需要为其创建自定义编组器?
作为一个附带问题,Dynamo中的列表排序是否保留正确?
答案 0 :(得分:1)
DynamoDB supports the following types:
标量和标量集:N,NS,S,SS,B,BS,Null,布尔
文件:地图,清单
有序地图不属于受支持的类型。如果使用Mapper作为LinkedHashMap,则需要创建自定义编组器。
保留列表顺序。订单无法保证。
答案 1 :(得分:0)
您可以将订单保留地图表示为键/值对列表:
[
{"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());
}
}
}