我正在使用Guava Futures將未來的調用鏈接在一起。特別是我使用的組合爲Futures.transform(...)
和Futures.transformAsync(...)
,但生成的代碼不是非常可讀。有沒有辦法以更「流利」的方式表達同樣的東西?轉換期貨的流利語法
回答
如果您正在尋找流利方法鏈接就像JDK的CompletableFuture
:
completableFuture
.thenApply(f1)
.thenApplyAsync(f2, executor)
則沒有,用番石榴的ListenableFuture
和包裝transform
s是要走的路是不可能的。 (也許谷歌內部他們有一些精通包裝編輯 - 您對谷歌工作,所以你會知道;))
說了這麼多,你可以:
- 使用一些現有的代碼來擴展
ListenableFuture
用流利的方法(如在this - rather niche - Github project calledfluent-futures
,但它使用舊番石榴< 20 API), - 寫自己的包裝用這樣的方法(例如,基於
CompletableFuture
或fluent-futures
API), - 堅持番石榴API(至少是什麼我們在處理
ListenableFuture
API時) 使用一些適配器並將
ListenableFuture
轉換爲CompletableFuture
並使用其流暢的API - 例如, future-converter:import static net.javacrumbs.futureconverter.java8guava.FutureConverter.*; //... ListenableFuture<String> guavaListenableFuture = toListenableFuture(completable); //... CompletableFuture<String> completable = toCompletableFuture(listenable);
(我們確實有一個流利的包裝,現在審查,希望在未來幾周內提交,它也會出現在公共Guava。) –
這很棒,不能等待! – Xaerxess
@ChrisPovirk mentioned in a comment上個月一口流利的包裝很快就出現在公衆番石榴,以及它現在有23.0快照。
新的FluentFuture
類註釋爲@Beta
因此,甚至當番石榴23.0發佈時,它可能仍然會有變化。
無論如何,如果你git clone
番石榴,現在,你可以這樣做:
ExecutorService executor = Executors.newFixedThreadPool(1);
// WARNING: based on UNRELEASED version, this is just to get a glimpse of the future... (Future... get it?) :o)
FluentFuture<String> f =
FluentFuture.from(immediateFuture("world"))
.transform(name -> "Hello " + name, directExecutor())
.transformAsync(input -> immediateFuture(input + "!"), executor);
System.out.println(f.get());
(其中,令人驚訝的是輸出 「Hello World!」)
番石榴23 rc1現已發佈! –
- 1. 流利的NHibernate和MySQL轉換語法?
- 2. 如何將查詢語法轉換爲流利的語法?
- 3. IQueryable擴展方法的流利語法?
- 4. 朱利安日期轉換
- 5. 流利的綁定和轉換
- 6. Unity 2屬性注入,如何將配置轉換爲流利的語法?
- 7. 流利的語法和繼承
- 8. Spring雲流轉換表達式語法
- 9. 將意大利語和意大利語轉換爲蟒碼數
- 10. 貨幣轉換器! (如果語句)
- 11. 轉換貨幣
- 12. 將瑞典語字符串轉換爲貨幣無法正常轉換
- 13. 將LINQ語句從查詢轉換爲流暢的c#語法
- 14. 將朱利安日轉換爲日期
- 15. 轉換陽曆日期到朱利安
- 16. Struts2 Java利用日期轉換問題
- 17. 流星貨幣交換
- 18. Javascript貨幣轉換
- 19. 貨幣轉換 - AngularJS
- 20. Django貨幣轉換
- 21. 貨幣轉換器
- 22. ANTLR4 - 利用訪問者把語法樹轉換成AST
- 23. 2d轉換語法
- 24. Rails中的貨幣轉換
- 25. 貨幣轉換器不轉換
- 26. 從FMPXMLRESULT到FMRESULTSET的XSL轉換(2種流行的FileMaker語法)
- 27. 無法實現轉換流
- 28. 流利的NHibernate的Syscache2緩存過期
- 29. 無法使Flex轉換行爲順利
- 30. 將語法轉換爲LL1語法
你可以顯示你的例子意思是*不太可讀*? – Eugene