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

问题描述 投票:0回答:2

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

我当前的代码

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

示例:认为“名称”箱是字符串列表。

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

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

java aerospike
2个回答
0
投票

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

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

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

替代如果您需要维护Collection的顺序,但想要唯一的值,那么另一个选择是检查该值是否已经存在或使用Stream#distinct。

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

0
投票

[ListOperation.append()可以取一个带有标志的ListOperation.append()ListPolicy具有字段ListPolicyListWriteFlags,如果您希望仅在值是一个新的唯一列表元素时才添加该字段,则应将其合并。

© www.soinside.com 2019 - 2024. All rights reserved.