[英]Storing Future<Double> in ArrayList
如果你有
ArrayList<Future<Double>>calculations = new ArrayList();
或與此相關的任何Future對象,它將在可調用對象完成運行時自動從Future值轉換為所需的對象類型(在這種情況下為Double),還是最好讓它具有
ArrayList<Double>calculations = new ArrayList();
並簡單地檢查可調用項的完成以添加到ArrayList中?
不會進行任何轉換。
對於“哪個更好”的問題,您在意見上有些分歧。 這取決於您的應用程序,但是如果您要保留計算列表及其結果,則以下將是一種可靠的方法。 如果您不擔心RAM,那么“無論是哪個”問題的一個很好的解決方案是“為什么不同時使用兩個?”
使用以下內容,您可以同時維護對計算和結果的引用,並且可以使用聚合操作,以便日后需要執行更多操作時,可以更輕松地執行復雜的操作。
List<Future<Double>> calculations = new ArrayList();
List<Double> results = new ArrayList();
calculations.stream().forEach((Future<Double> _item) -> {
try {
results.add(_item.get());
} catch (InterruptedException ex) {
// do something
} catch (ExecutionException ex) {
// do something
}
});
大概您是在以下結果列表中
List<Double> results
從“未來”計算的結果中填充。
如果沒有編寫一些代碼來填充它,就無法神奇地獲得一個double列表。 您需要編寫什么代碼取決於要對結果執行什么操作。 例如,您打算如何檢查所有“未來”任務是否已完成?
您可以做一些簡單的事情
Double getResult(index i) {
if ( calculations.get(i).isDone() ) {
return calculations.get(i).get();
} else {
// Do something else
}
}
並避免單獨列出所有結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.