Как предотвратить переупорядочение набора Cassandra при получении данных с помощью драйвера Java

#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);
    }
  }