如何使用Java8Lambdas用if-else重写这个double-for循环?

如何使用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][

我试图用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][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]))
    )
);