Вам нужно обратиться к разделу об асинхронной подкачке - вам необходимо предоставить обратный вызов, который будет собирать данные в список, предоставленный как внешний объект. Документация имеет следующий пример:
CompletionStage<AsyncResultSet> futureRs =
session.executeAsync("SELECT * FROM myTable WHERE id = 1");
futureRs.whenComplete(this::processRows);
void processRows(AsyncResultSet rs, Throwable error) {
if (error != null) {
// The query failed, process the error
} else {
for (Row row : rs.currentPage()) {
// Process the row...
}
if (rs.hasMorePages()) {
rs.fetchNextPage().whenComplete(this::processRows);
}
}
}
в этом случае processRows
может хранить данные в списке, который является частью текущего объекта, что-то вроде этого:
class Abc {
List<Row> rows = new ArrayList<>();
// call to executeAsync
void processRows(AsyncResultSet rs, Throwable error) {
....
for (Row row : rs.currentPage()) {
rows.add(row);
}
....
}
}
, но вам нужно быть очень осторожным с select * from table
, так как он может вернуть много результатов, плюс он может прерваться, если у вас слишком много данных - в этом случае лучше выполнить сканирование диапазона токенов (у меня есть пример для драйвера 3.x , но для 4.x пока нет).