日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

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

發(fā)布時(shí)間:2023/12/1 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 finditerable 转list_java – 通过拆分和运行将ListenableFuture转换为Iterable 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

(替代

my original answer)

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

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

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;

無(wú)論如何,那就是這個(gè)想法.但我的實(shí)施是愚蠢的.我們可以輕松地同時(shí)執(zhí)行這兩個(gè)步驟:

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;

因?yàn)檫@使得n Futures.transform調(diào)用而不是1并且因?yàn)樗褂脝为?dú)的Executor,所以如果轉(zhuǎn)換是重量級(jí)的,那么它比我的其他解決方案更好,如果它是輕量級(jí)的則更糟.另一個(gè)警告仍然是:只有當(dāng)你知道你將擁有多少輸出時(shí),這才有效.

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。