Aerospike - Как вставить уникальный элемент в данный список, используя Java? - PullRequest
2 голосов
/ 29 января 2020

Если я запускаю приведенный ниже код, значение, полученное из getUserName (), добавляется в список. Но если я запускаю его снова, то же значение вставляется снова. У меня вопрос, как убедиться, что значение добавляется только один раз (Уникальный)?

Мой текущий код

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

Пример: Считайте, что bin с именем является списком строк.

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

Если я снова добавлю T2, список должен остаться прежним.

Ответы [ 2 ]

2 голосов
/ 29 января 2020

ListOperation.append() может принимать ListPolicy, который принимает флаги. Для таких операций записи, как этот, ListWriteFlags имеют поля ADD_UNIQUE и NO_FAIL, которые вы должны объединить, если хотите, чтобы значение добавлялось только в том случае, если это новый уникальный элемент списка.

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

1 голос
/ 29 января 2020

Я предполагаю, что ListOperation поддерживается списком, поскольку код недоступен. Предполагая, что это так, списки поддерживают порядок, допуская нулевые значения. Наборы, с другой стороны, допускают только уникальные ненулевые значения, так что это будет идеальным решением для вас.

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

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

Альтернатива Если вам нужно поддерживать порядок вашей коллекции но вы хотите уникальные значения, другой вариант будет проверять при добавлении, если значение уже существует ИЛИ используя Stream # Different.

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