我嘗試使用 java-driver-async-queries執行異步查詢。我正在修改FutureCallback中的列表,但似乎不起作用 -使用ResultSetFuture修改集合
List<Product> products = new ArrayList<Product>();
for (// iterating over a Map) {
key = entry.getKey();
String query = "SELECT id,desc,category FROM products where id=?";
ResultSetFuture future = session.executeAsync(query, key);
Futures.addCallback(future,
new FutureCallback<ResultSet>() {
@Override public void onSuccess(ResultSet result) {
Row row = result.one();
if (row != null) {
Product product = new Product();
product.setId(row.getString("id"));
product.setDesc(row.getString("desc"));
product.setCategory(row.getString("category"));
products.add(product);
}
}
@Override public void onFailure(Throwable t) {
// log error
}
},
MoreExecutors.sameThreadExecutor()
);
}
System.out.println("Product List : " + products); // Not printing correct values. Sometimes print blank
是否有其他方法?
基於米哈伊爾Baksheev答案我執行,現在得到正確的結果。 只是一個轉折點。我需要實現一些額外的邏輯。我想知道如果我可以使用List<MyClass>
代替List<ResultSetFuture>
和MyClass的作爲 -
public class MyClass {
private Integer productCount;
private Integer stockCount;
private ResultSetFuture result;
}
然後同時迭代設置FutureList
爲 -
ResultSetFuture result = session.executeAsync(query, key.get());
MyClass allResult = new MyClass();
allResult.setInCount(inCount);
allResult.setResult(result);
allResult.setSohCount(values.size() - inCount);
futuresList.add(allResult);
什麼是「不工作」的定義是什麼?發佈預期行爲和實際行爲。 –
你是不是在等你的未來?看起來你創建了一堆期貨,並立即打印結果結構。結果結構尚未填充,因爲大部分期貨仍在運行。 – RussS
謝謝。什麼是修正。有沒有我可以參考的代碼示例? – Saurabh