#cassandra #set #datastax-java-driver
#cassandra #установить #datastax-java-driver
Вопрос:
Извлечение с использованием коллекций описывает порядок коллекций. В моем случае функция возврата упорядоченной коллекции из set <text>
типа — это то, что мне нужно. Но коллекция, десериализованная в java Set
и java Set
, не дает никакой гарантии, что порядок элементов будет сохранен. Поэтому результат запроса может отличаться от объекта java.
Я пытаюсь getSet()
, и он возвращает упорядоченную коллекцию. Я не понимаю, почему. Возможно, это связано с десериализацией ‘LinkedHashSet’?
Как гарантировать получение отсортированной коллекции с помощью драйвера Java, как указано в документации Cassandra?
Ответ №1:
Гарантируется SetCodec<T>
:
package com.datastax.driver.core;
public abstract class TypeCodec<T> {
...
/**
* This codec maps a CQL {@link DataType#set(DataType) set type} to a Java {@link Set}.
* Implementation note: this codec returns mutable, non thread-safe {@link LinkedHashSet}
* instances.
*/
private static class SetCodec<T> extends AbstractCollectionCodec<T, Set<T>> {
private SetCodec(TypeCodec<T> eltCodec) {
super(DataType.set(eltCodec.cqlType), TypeTokens.setOf(eltCodec.getJavaType()), eltCodec);
}
@Override
protected Set<T> newInstance(int size) {
return new LinkedHashSet<T>(size);
}
}