亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否可以在 lambda 表達式中迭代數組?(java)

是否可以在 lambda 表達式中迭代數組?(java)

FFIVE 2023-12-13 10:12:44
我需要ForkJoinTask為每個部門創建一個新的部門,并且不知道如何到達數組中的下一個位置。有人能幫我嗎?protected static double parManyTaskArraySum(final double[] input, final int numTasks) {        double sum = 0;        // ToDo: Start Calculation with help of ForkJoinPool        ForkJoinPool fjp = new ForkJoinPool(numTasks);        fjp.execute(() -> {            sum+=( 1 / input[???] ); //the problem is here        });        return sum;    }例外:從 lambda 表達式引用的局部變量必須是最終的或實際上最終的
查看完整描述

1 回答

?
米脂

TA貢獻1836條經驗 獲得超3個贊

您正在Runnable向您的ForkJoinPool. 因此,您無法使用所需的數組塊對其進行參數化。


您實際上應該定義一個擴展類RecursiveTask<Double>,其構造函數將數組塊作為參數,并決定是對整個數組進行操作還是在數組太大時進行分叉。


然后使用invoke您的方法ForkJoinPool來獲取最終計算的結果,通過向其傳遞一個RecursiveTask<Double>采用整個數組的新實例(任務將根據您的標準決定是一次性完成所有操作還是分叉,例如,數組元素的一半轉移到另一個任務并稍后加入)。


請注意,這里有些混亂。


事實上,如果您不需要利用 fork/join 框架而只想異步執行操作,那么有很多方法可以在不使用ForkJoinPool.


例如:


Callable<Double> call  = () -> {return Arrays.stream(input).sum();};

Future<Double> future =  Executors.newSingleThreadExecutor().submit(call);

// when you're ready

Double sum = future.get();


查看完整回答
反對 回復 2023-12-13
  • 1 回答
  • 0 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號