我使用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,您应该将其作为答案。您始终可以创建自己的界面来降低第二个版本的冗长度。 –