2 回答

TA貢獻1856條經驗 獲得超5個贊
您可以從ithat changesi的值創建一個最終對象。finalI價值是最終的,永遠不會改變。
int finalI = i;
int finalJ = j;
這是添加final對象后的代碼
VerticalLayout lines = new VerticalLayout();
HorizontalLayout line;
int width = 20;
List<Pixel> pixels = pixelRepository.findAll();
for (int i = 0; i < width; ++i) {
int finalI = i;
line = new HorizontalLayout();
Stream<Pixel> pixelLine = pixels.stream().filter(pixel -> pixel.getPosition().x == finalI);
for (int j = 0; j < width; ++j) {
int finalJ = j;
addNewColorButton(line, pixelLine.filter(pixel -> pixel.getPosition().y == finalJ).findFirst().get().color);
}
lines.add(line);
}
add(lines);

TA貢獻2021條經驗 獲得超8個贊
for(final int i=0;i<width;++i)
出于明顯的原因,這是相當虛假的。
如果您需要i
進入 lambda,您可以將其轉換為一個數組,編譯器會將其視為如下effectively final
:
int[] wrapped_i = new int[]{i}
并從 lambda 內部訪問它wrapped_i[0]
。這種方法有點容易出錯并且無法包治百病,尤其是當您使用并行流時(這有點像是整個賣點)。
添加回答
舉報