使用Java8流将null替换为2d字符串数组中的另一个值

vq8itlhq  于 2021-08-20  发布在  Java
关注(0)|答案(3)|浏览(314)

我想换一个 null 按字符串计算的值 Z 在二维数组中。我有这样的数据:

String[][] userData = { { "User A", "A" }, { null, null }, { "User B", "B" } };

现在我需要改变这个 userData 如下图所示:

String[][] userData = { { "User A", "A" }, { "Z", "Z" }, { "User B", "B" } };

如何通过Java8流实现这一点,并以相同的格式(2d字符串数组)返回结果?

z9zf31ra

z9zf31ra1#

您可以使用一对 IntStream.range(int, int) 调用以生成有效数组索引,然后使用单个 forEach 替换任何 null (s) 。喜欢

String[][] userData = { { "User A", "A" }, { null, null }, { "User B", "B" } };
IntStream.range(0, userData.length).forEach(x -> 
            IntStream.range(0, userData[x].length).forEach(y -> {
    if (userData[x][y] == null) {
        userData[x][y] = "Z";
    }
}));
System.out.println(Arrays.deepToString(userData));

产出(按要求)

[[User A, A], [Z, Z], [User B, B]]
nfg76nw0

nfg76nw02#

检查这是否适合你

String[][] userData = {{"User A", "A" }, {null, null}, {"User B", "B" }};
        userData = Arrays.stream(userData).map(arr -> Arrays.stream(arr)
            .map(a -> a!=null ? a : "Z").toArray(String[]::new)).toArray(String[][]::new);

        System.out.println(Arrays.deepToString(userData));
        //[[User A, A], [Z, Z], [User B, B]]
wz3gfoph

wz3gfoph3#

我建议一个不使用流的解决方案,但需要Java8+。
(list.replaceall是在java 8中引入的,它接受 UnaryOperator 将应用于列表中的每个元素)

String[] replace = {null, null};
String[] replaceWith = { "Z", "Z" };

List<String[]> list = Arrays.asList(userData);
list.replaceAll(arr -> Arrays.equals(arr, replace) ? replaceWith : arr);
System.out.println(Arrays.deepToString(list.toArray()));

输出:

[[User A, A], [Z, Z], [User B, B]]

相关问题