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
他の方法はありますか?
私はMikhail Baksheevの答えに基づいて実装しましたが、今は適切な結果を得ています。 ちょうどひねり。私は実装する必要があるいくつかの余分なロジックがあります。反復がFutureList
を設定しながら
public class MyClass {
private Integer productCount;
private Integer stockCount;
private ResultSetFuture result;
}
- - 私はとしてList<MyClass>
代わりのList<ResultSetFuture>
とMyClassのを使用することができる場合、私は疑問に思って
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