我使用Java 8並試圖編寫純功能代碼。在我最近的一個項目中,我需要遍歷圖像中的每個像素,並對每個像素執行一些計算。我想出的代碼是這樣的:功能上遍歷圖像的習慣性方式
IntStream
.range(0, newImage.getWidth())
.forEach(i -> IntStream
.range(0, newImage.getHeight())
.forEach(n -> {
inspectPixel(i, n, newImage);
})
);
然而,勢在必行的版本是這樣的:
for (int i = 0; i < newImage.getWidth(); i++){
for (int n = 0; n < newImage.getHeight(); n++){
inspectPixel(i, n, newImage);
}
}
或許這只是因爲我太習慣於命令式編程,但後者似乎比前者更可讀。其中一件事正在進行:
- 我的代碼是錯誤的,我是否正在以這種錯誤的方式?如果是這樣,應該是的代碼樣子?你如何在功能上遍歷任何二維數據結構,而不僅僅是一個圖像?
- 對於Java 8,這實際上是程序的最佳版本,對於函數式編程來說,這種情況很簡單。
'我的代碼錯了'你的代碼錯了嗎?它不起作用嗎?如果不起作用,問題是什麼? –
錯誤,因爲沒有效率或慣用@vincemigh – Michael
我不明白你在找什麼。一個更簡單的界面來使用?就像你在問Java是否具有掃描圖像像素的功能支持一樣?請更清楚,您的問題目前看起來像是「我該如何改進我的代碼」後。如果你不確定什麼是正確的,你怎麼可能知道你錯了?對於你所知道的,你可以以最好的方式做到這一點。如果您問JDK是否帶有一個可以輕鬆掃描圖像中像素的api,您應該將其作爲答案。您始終可以創建自己的界面來降低第二個版本的冗長度。 –