[英]How do I return my own futures in Java?
在Java 8中,我正在編寫一個DAO方法,該方法調用一個返回ListenableFuture的方法(在這種情況下,它是一個返回ResultSetFuture的Cassandra異步查詢)。
但是,我堅持認為我應該如何將Future返回給DAO方法的調用者。 我不能只返回ResultSetFuture,因為將來會返回一個ResultSet。 我想處理ResultSet並返回一個不同的對象。 例如:
public ListenableFuture<ThingObj> queryForThingAsync(String thingId) {
ListenableFuture<ResultSet> rsFuture = db.getSession().executeAsync(QueryBuilder.select().all().from("thingSchema","Thing").where(eq("thingId",thingId)));
// Now what? How do I create a ListenableFuture<ThingObj> given a ListenableFuture<ResultSet> and a method that can convert a ResultSet into a ThingObj?
}
由於看起來你正在使用Guava的ListenableFuture
,最簡單的解決方案是來自Futures
的轉換方法:
返回一個新的ListenableFuture,其結果是將給定Function應用於給定Future的結果的乘積。
有幾種方法可以使用它,但由於您使用的是Java 8,最簡單的方法是使用方法引用:
public ListenableFuture<ThingObj> queryForThingAsync(String thingId) {
ListenableFuture<ResultSet> rsFuture = db.getSession().executeAsync(QueryBuilder.select().all().from("thingSchema","Thing").where(eq("thingId",thingId)));
return Futures.transform(rsFuture, Utils::convertToThingObj);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.