簡體   English   中英

儲存未來 <Double> 在ArrayList中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM