有序 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());
        }
    }
}