如何使用Java8Lambdas用if-else重写这个double-for循环?
我试图用Java8Lambdas重写这段代码。但到目前为止,我想不出任何方法来处理if和else如何使用Java8Lambdas用if-else重写这个double-for循环?,java,Java,我试图用Java8Lambdas重写这段代码。但到目前为止,我想不出任何方法来处理if和else for (int i = 0; i<= m; i++) { for (int j = 0; j <=n ; j++) { if (i == 0 || j == 0) L[i][j] = 0; else if (X.charAt(i-1) == Y.charAt(j-1)) L[i][
for (int i = 0; i<= m; i++)
{
for (int j = 0; j <=n ; j++)
{
if (i == 0 || j == 0)
L[i][j] = 0;
else if (X.charAt(i-1) == Y.charAt(j-1))
L[i][j] = L[i-1][j-1] + 1;
else
L[i][j] = Math.max(L[i-1][j], L[i][j-1]);
}
}
for(int i=0;i将代码转换为lambda:
Runnable lambda = () -> {
for (int i = 0; i <= m; i++) {
for (int j = 0; j <= n; j++) {
if (i == 0 || j == 0)
L[i][j] = 0;
else if (X.charAt(i-1) == Y.charAt(j-1))
L[i][j] = L[i-1][j-1] + 1;
else
L[i][j] = Math.max(L[i-1][j], L[i][j-1]);
}
}
};
lambda.run();
哦,你不想要lambda{}
块吗
我并不认为这样做有什么意义。为什么你认为lambdas会让这更好?我认为这是错误的方法,即尝试重写代码。更好的方法是根据你想要实现的目标进行编码。很明显,你会使用并行流来加快速度/s@Kayaman因为它需要有序的处理(forEachOrdered
),用并行流可以做的事情很少。事实上,有些人把parallel()
理解为faster()
,因此我的评论很滑稽。
IntStream.rangeClosed(0, m).forEachOrdered(i -> {
IntStream.rangeClosed(0, n).forEachOrdered(j -> {
if (i == 0 || j == 0)
L[i][j] = 0;
else if (X.charAt(i-1) == Y.charAt(j-1))
L[i][j] = L[i-1][j-1] + 1;
else
L[i][j] = Math.max(L[i-1][j], L[i][j-1]);
});
});
IntStream.rangeClosed(0, m).forEachOrdered(i ->
IntStream.rangeClosed(0, n).forEachOrdered(j ->
L[i][j] = (i == 0 || j == 0 ? 0
: X.charAt(i-1) == Y.charAt(j-1) ? L[i-1][j-1] + 1
: Math.max(L[i-1][j], L[i][j-1]))
)
);