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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

finditerable 转list_java – 通过拆分和运行将ListenableFuture转换为Iterable

發布時間:2023/12/1 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 finditerable 转list_java – 通过拆分和运行将ListenableFuture转换为Iterable 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(替代

my original answer)

但是,如果轉型是緩慢的,或者某些輸入可能會失敗但是對其他輸入成功會怎么樣?在這種情況下,我們希望單獨轉換每個輸出.另外,我們希望確保轉換只發生一次.我們的集合轉換方法不能保證這一點.因此,在您的示例代碼中,輸出上的每次迭代都會向執行程序提交新任務,即使先前提交的任務可能已經完成.因此,只有在轉換是輕量級的時候,我們才推薦Iterables.transform和朋友. (通常,如果你正在做重量級的事情,你的轉換函數將拋出一個已檢查的異常,函數不允許.考慮這個提示:)當然,你的例子不會觸發提示.)

這在代碼中意味著什么?基本上,我們將顛倒我在其他答案中給出的操作順序.我們將轉換為Future< Iterable< A>>到Iterable< Future< A>>第一.然后我們將為每個A提交一個單獨的任務,將其轉換為B.對于后一步,我們將提供Executor so that the transformation doesn’t block some innocent thread.(我們現在只需要Futures.transform,所以我靜態導入它. )

List> individuals = newArrayList();

for (int i = 0; i < knownSize; i++) {

final int index = i;

individuals.add(transform(input,new Function,A>() {

@Override

public A apply(List values) {

return values.get(index);

}

}));

}

List> result = newArrayList();

for (ListenableFuture original : individuals) {

result.add(transform(original,function,executor));

}

return result;

無論如何,那就是這個想法.但我的實施是愚蠢的.我們可以輕松地同時執行這兩個步驟:

List> result = newArrayList();

for (int i = 0; i < knownSize; i++) {

final int index = i;

result.add(transform(input,B>() {

@Override

public B apply(List values) {

return function.apply(values.get(index));

}

},executor));

}

return result;

因為這使得n Futures.transform調用而不是1并且因為它使用單獨的Executor,所以如果轉換是重量級的,那么它比我的其他解決方案更好,如果它是輕量級的則更糟.另一個警告仍然是:只有當你知道你將擁有多少輸出時,這才有效.

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的finditerable 转list_java – 通过拆分和运行将ListenableFuture转换为Iterable的全部內容,希望文章能夠幫你解決所遇到的問題。

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