使用 Java 8 Stream 将 null 替换为二维字符串数组中的另一个值
Replace null by another value in 2D String array using Java 8 Stream
我想用二维数组中的字符串 Z
替换 null
值。
我有这样的数据:
String[][] userData = { { "User A", "A" }, { null, null }, { "User B", "B" } };
现在我需要像下面这样更改 userData
:
String[][] userData = { { "User A", "A" }, { "Z", "Z" }, { "User B", "B" } };
如何通过 java 8 流实现此目的并以相同格式(2D 字符串数组)返回结果?
与其尝试使用 lambda 表达式重新生成整个数组,不如使用一对 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]]
检查这是否适合你
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]]
我建议不使用流的解决方案,但需要 java 8+.
(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]]
我想用二维数组中的字符串 Z
替换 null
值。
我有这样的数据:
String[][] userData = { { "User A", "A" }, { null, null }, { "User B", "B" } };
现在我需要像下面这样更改 userData
:
String[][] userData = { { "User A", "A" }, { "Z", "Z" }, { "User B", "B" } };
如何通过 java 8 流实现此目的并以相同格式(2D 字符串数组)返回结果?
与其尝试使用 lambda 表达式重新生成整个数组,不如使用一对 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]]
检查这是否适合你
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]]
我建议不使用流的解决方案,但需要 java 8+.
(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]]