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_UNIQUE
和 NO_FAIL
字段,如果您希望仅在它是新的唯一列表元素时才添加值,则应合并这两个字段。
如果我 运行 下面的代码,来自 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_UNIQUE
和 NO_FAIL
字段,如果您希望仅在它是新的唯一列表元素时才添加值,则应合并这两个字段。