我對一個似乎無法處理它的局部變量和lambda函數有個奇怪的問題。我不斷收到錯誤消息「在一個封閉的範圍內定義局部變量ACC必須是最後的或有效的最終」Java中局部變量+ lambda函數的錯誤
我的代碼如下所示:
Accumulator acc = new Accumulator(0, 0);
stream.reduce(0, (sum, value) -> {
acc = new Accumulator(sum + value, acc.getB()+1);
return sum + value;
});
因此,大家可以看到,我試圖減少整數流並保留2個值,而不僅僅是減少進程中的一個。我試圖將這些值保存在小幫手類Accumulator
中,其中有final int a
和final int b
來存儲這些值。但是,它好像stream.reduce
無法達到acc
。
在我的程序的其他部分,包括其他lambda函數,類似的代碼結構工作正常(聲明局部變量並在lambda函數內改變它們),所以我不知道該怎麼做。
實施例(該stream
被初始化當然):
ArrayList<StudentRecord> studentList = new ArrayList<StudentRecord>();
stream.forEach(student -> {
studentList.add(student);
});
幫助將理解的, 問候
錯誤信息告訴你到底發生了什麼問題:'acc'沒有聲明爲'final'。問題是什麼? –
[請在搜索前搜索](/ search?q =%5Bjava%5D + local + variable + defined + in + an + enclosing + scope + must + be + final + or + effective + final),more [ ](/幫助/搜索)。 –
如果您發佈了其他代碼,那麼我們可以告訴你有什麼不同。否則,我們在這裏沒有任何事情要做。 – HopefullyHelpful