日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

使用Java 8 CompletableFuture和Rx-Java Observable

發布時間:2023/12/3 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Java 8 CompletableFuture和Rx-Java Observable 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我想使用Java 8 CompletableFuture和Rx-Java Observable探索一個簡單的分散聚集場景。

場景很簡單–產生大約10個任務,每個任務返回一個字符串,最終將結果收集到一個列表中。

順序的

其順序版本如下:

public void testSequentialScatterGather() throws Exception {List<String> list =IntStream.range(0, 10).boxed().map(this::generateTask).collect(Collectors.toList());logger.info(list.toString()); }private String generateTask(int i) {Util.delay(2000);return i + "-" + "test"; }

隨著CompletableFuture

可以使用稱為supplyAsync的實用程序方法來使方法返回CompletableFuture,我正在使用此方法的一種變體,它接受要使用的顯式Executor ,而且我故意為其中一個輸入拋出異常:

private CompletableFuture<String> generateTask(int i,ExecutorService executorService) {return CompletableFuture.supplyAsync(() -> {Util.delay(2000);if (i == 5) {throw new RuntimeException("Run, it is a 5!");}return i + "-" + "test";}, executorService); }

現在分散任務:

List<CompletableFuture<String>> futures =IntStream.range(0, 10).boxed().map(i -> this.generateTask(i, executors).exceptionally(t -> t.getMessage())).collect(Collectors.toList());

在分散任務結束時,結果是CompletableFuture列表。 現在,要從中獲取String列表有些棘手,這里我使用Stackoverflow中建議的一種解決方案:

CompletableFuture<List<String>> result = CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])).thenApply(v -> futures.stream().map(CompletableFuture::join).collect(Collectors.toList()));

這里僅使用CompletableFuture.allOf方法來構成下一步操作,一旦所有分散的任務都完成了,則一旦完成任務,期貨就會再次流式傳輸并收集到一個字符串列表中。

然后可以異步顯示最終結果:

result.thenAccept(l -> {logger.info(l.toString()); });

使用Rx-java Observable

使用Rx-java進行分散收集相對比CompletableFuture版本更干凈,因為Rx-java提供了更好的方法將結果組合在一起,這也是執行分散任務的方法:

private Observable<String> generateTask(int i, ExecutorService executorService) {return Observable.<String>create(s -> {Util.delay(2000);if ( i == 5) {throw new RuntimeException("Run, it is a 5!");}s.onNext( i + "-test");s.onCompleted();}).onErrorReturn(e -> e.getMessage()).subscribeOn(Schedulers.from(executorService)); }

并分散任務:

List<Observable<String>> obs =IntStream.range(0, 10).boxed().map(i -> generateTask(i, executors)).collect(Collectors.toList());

我又有了一個Observable的列表,而我需要的是一個結果列表,Observable提供了一個合并方法來做到這一點:

Observable<List<String>> merged = Observable.merge(obs).toList();

可以訂閱并在可用時打印結果:

merged.subscribe(l -> logger.info(l.toString()));

翻譯自: https://www.javacodegeeks.com/2015/08/using-java-8-completablefuture-and-rx-java-observable.html

總結

以上是生活随笔為你收集整理的使用Java 8 CompletableFuture和Rx-Java Observable的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲 欧洲 日韩 | 午夜久久久久久久 | 男人天堂2014 | 多男调教一女折磨高潮高h 国内毛片毛片毛片毛片毛片 | 日韩精品在线播放 | 91禁蘑菇在线看 | 欧美 亚洲 另类 激情 另类 | 色午夜视频 | 久久在线免费观看 | xxxxx色| 黄色男女网站 | 久久香焦| 伊人网色 | 欧美一区二区高清视频 | 欧日韩av | 国产美女主播在线 | 四虎永久在线观看 | 中文字幕在线第一页 | 国产黄视频在线观看 | 中文字幕av久久爽一区 | 顶级毛片| 在线视频久 | 亚洲人成电影在线播放 | 成为性瘾网黄的yy对象后 | 婷婷777 | 色婷婷av一区二区三区之红樱桃 | 综合激情网 | 夜夜嗨av一区二区三区 | 污视频免费在线观看网站 | 超碰成人在线免费观看 | 欧美日色 | 欧美日韩激情在线 | 日日夜夜欧美 | 性生交大片免费看 | 好吊操这里只有精品 | аⅴ资源中文在线天堂 | 亚洲美女在线观看 | 肉丝肉足丝袜一区二区三区 | 亚洲av无码专区国产乱码不卡 | 欧美成人秋霞久久aa片 | av网址导航 | 免费大片av | 黑人精品xxx一区一二区 | 亚洲三级黄色 | 国产精品久久久久aaaa | 91草视频| 性色国产成人久久久精品 | a∨鲁丝一区鲁丝二区鲁丝三区 | 国产精品久久久久三级无码 | 僵尸叔叔在线观看国语高清免费观看 | 国产成人免费视频网站 | 小辣椒导航 | 男人深夜影院 | 影音先锋啪啪资源 | 国产一区二区视频在线观看免费 | 尤果网福利视频在线观看 | 中文字幕精品一二三四五六七八 | 一级黄色片大全 | 一级黄色录像免费观看 | 久久久精品福利 | 小日子的在线观看免费第8集 | 国产女主播视频 | 亚洲精品一区 | 99精品久久久 | 在线看不卡av| 日本激情一区二区 | 狠狠a| 日韩激情电影在线 | 国产精品理论片在线观看 | 91久久精品一区二区别 | 国产日韩二区 | 免费看黄的网址 | 日韩欧美精品在线 | 欧美体内谢she精2性欧美 | 九九精品久久 | 精品人妻一区二区三区四区久久 | 久久婷婷热| 亚洲国产成人一区二区精品区 | 人成网站在线观看 | 国产精品第二十页 | 午夜婷婷丁香 | 色资源在线观看 | 91成人亚洲 | 人妖一区二区三区 | 免费看国产视频 | 精品久久久av| 俄罗斯一级片 | 7m精品福利视频导航 | 亚洲免费一二三区 | 国产精品久久久久9999爆乳 | 精品| 嫩草影院中文字幕 | 欧洲成人av| 天天干中文字幕 | 欧美性猛交aaaa片黑人 | 日韩在线免费播放 | 人妻在线一区 | 国产欧美亚洲一区 | 精品无码一区二区三区蜜臀 |