如果运行下面的代码,则来自getUserName()的值将附加到列表中。但是,如果我再次运行它,将再次插入相同的值。我的问题是,如何确保仅将值附加一次(唯一)?
我当前的代码
Operation operation = ListOperation.append("names", Value.get(usr.getUserName()));
Record record = client.operate( policy, key, operation );
示例:认为“名称”箱是字符串列表。
'LIST["T1", "T2"]'
如果再次添加T2,则列表应保持不变。
我假设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());
[ListOperation.append()
可以取一个带有标志的ListOperation.append()
。 ListPolicy
具有字段ListPolicy
和ListWriteFlags
,如果您希望仅在值是一个新的唯一列表元素时才添加该字段,则应将其合并。