java—用多个空值遍历已存在的数组,并用特定字符串填充非空值

jm81lzqq  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(300)

所以我的问题是我有这个方法:

public static String[][][][] inflate(String[][][][] f) {
    for (int i = 0; i <= f.length; i++) {
        for (int j = 0; j <= f[i].length; j++) {
            for (int k = 0; k <= f[i][j].length; k++) {
                for (int l = 0; l <= f[i][j][k].length; l++) {
                    if (f[i][j][k][l] != null) {
                        f[i][j][k][l] = "/" + (l) + "|" + (k) + "|" + (j) + "|" + (i) + "\\";
                    }
                }
            }
        }
    }
    return f;
}

正如标题所说,4维字符串数组f是给定的,其中已经有一些空值。现在我想遍历这个数组,我总是检查对象是否为null,如果不是,我想用给定的字符串填充它。但我的问题是 NullPointerException 因为在某种程度上我的方法 k = 3 因为我的数组的长度在空值中也算obv。它将导致此异常,因为 f[i][j][k][l]k = 3 根本不存在。那么,我该如何处理这个问题,想要迭代它,但同时我觉得我不能使用它 f.length 作为终止条件。
我可以提供更多的信息,如果需要,但我认为这应该是足够的了解情况。

aamkag61

aamkag611#

你应该检查一下 nonNull 在筑巢的每一层。像这样:

IntStream.range(0, f.length)
    .filter(i -> Objects.nonNull(f[i]))
    .forEach(i -> IntStream.range(0, f[i].length)
        .filter(j -> Objects.nonNull(f[i][j]))
        .forEach(j -> IntStream.range(0, f[i][j].length)
            .filter(k -> Objects.nonNull(f[i][j][k]))
            .forEach(k -> IntStream.range(0, f[i][j][k].length)
                .filter(l -> Objects.nonNull(f[i][j][k][l]))
                .forEach(l -> f[i][j][k][l] =
                    "/" + (l) + "|" + (k) + "|" + (j) + "|" + (i) + "\\"))));

相关问题