Aerospike - 如何使用 Java 在给定列表中插入唯一项?

Aerospike - How to insert a unique item in a given list using Java?

如果我 运行 下面的代码,来自 getUserName() 的值将附加到列表中。但是,如果我再次 运行 它,则会再次插入相同的值。我的问题是,如何确保该值仅附加一次(唯一)?

我现在的代码

Operation operation = ListOperation.append("names", Value.get(usr.getUserName()));
Record record = client.operate( policy, key, operation );

示例: 将 "name" bin 视为字符串列表。

'LIST["T1", "T2"]'

如果我再次添加 T2,列表应该保持不变。

我假设 ListOperation 由 List 支持,因为代码不可用。假设是这样,列表在允许空值的同时保持顺序。另一方面,集只允许唯一的非空值,因此这将是您的完美解决方案。

Set<String> values = new HashSet<>();

values.add("T1");
values.add("T1"); // already contains value

备选 如果您需要维护集合的顺序但又想要唯一值,另一种选择是检查添加值是否已存在或使用 Stream#distinct。

List<String> values = ListOperation.values.stream().distinct().collect(Collectors.toList());

ListOperation.append() can take a ListPolicy, which takes flags. For write operations such as this, the ListWriteFlags 具有 ADD_UNIQUENO_FAIL 字段,如果您希望仅在它是新的唯一列表元素时才添加值,则应合并这两个字段。

https://www.slideshare.net/RonenBotzer/asug-tlvmeetup2talk