簡體   English   中英

如何在Java中返回自己的未來?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM