使用流将 2d int 数组格式化为字符串
Formatting a 2d int array into a string using streams
我有以下数组:
private static final int[][] BOARD = {
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 }
};
我想在其上创建一个字符串表示,所以如果我要在控制台上打印它,它应该如下所示:
[0,0,0,0,0]
[0,0,0,0,0]
[0,0,0,0,0]
[0,0,0,0,0]
[0,0,0,0,0]
我可以使用 2 个嵌套 for
循环来完成此操作,但我正在尝试使用流来完成此操作。这是我到目前为止得到的:
public String toString() {
StringJoiner board = new StringJoiner("\n");
for (int i = 0; i < BOARD.length; i++) {
board.add(
IntStream.of(BOARD[i])
.mapToObj(String::valueOf)
.collect(Collectors.joining(",", "[", "]"))
);
}
return board.toString();
}
这有可能吗?我对性能不是特别感兴趣(如果你愿意,可以随意添加一些关于这方面的评论),我只是想在单个流操作链中做到这一点。
您也可以使用 Arrays.stream
as :
Arrays.stream(BOARD)
.map(aBOARD -> IntStream.of(aBOARD)
.mapToObj(String::valueOf)
.collect(Collectors.joining(",", "[", "]")))
.forEach(board::add);
Collections 的 toString()
已经在 AbstractCollection class 中提供了该符号。只需使用:-
Arrays.stream(BOARD)
.forEach(ints -> System.out.println(
Arrays.stream(ints).boxed().collect(Collectors.toList()))
);
或者,如果您愿意将 int[][]
更改为 Integer[][]
,您甚至可以:-
Arrays.stream(BOARD)
.forEach(ints -> System.out.println(Arrays.deepToString(ints)));
您可以嵌套 stream
并将每个级别映射在一起,首先用逗号,然后用系统行分隔符。喜欢,
return Arrays.stream(BOARD).map(a -> Arrays.stream(a)
.mapToObj(String::valueOf).collect(Collectors.joining(",", "[", "]")))
.collect(Collectors.joining(System.lineSeparator()));
我明白了
[0,0,0,0,0]
[0,0,0,0,0]
[0,0,0,0,0]
[0,0,0,0,0]
[0,0,0,0,0]
我有以下数组:
private static final int[][] BOARD = {
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 }
};
我想在其上创建一个字符串表示,所以如果我要在控制台上打印它,它应该如下所示:
[0,0,0,0,0]
[0,0,0,0,0]
[0,0,0,0,0]
[0,0,0,0,0]
[0,0,0,0,0]
我可以使用 2 个嵌套 for
循环来完成此操作,但我正在尝试使用流来完成此操作。这是我到目前为止得到的:
public String toString() {
StringJoiner board = new StringJoiner("\n");
for (int i = 0; i < BOARD.length; i++) {
board.add(
IntStream.of(BOARD[i])
.mapToObj(String::valueOf)
.collect(Collectors.joining(",", "[", "]"))
);
}
return board.toString();
}
这有可能吗?我对性能不是特别感兴趣(如果你愿意,可以随意添加一些关于这方面的评论),我只是想在单个流操作链中做到这一点。
您也可以使用 Arrays.stream
as :
Arrays.stream(BOARD)
.map(aBOARD -> IntStream.of(aBOARD)
.mapToObj(String::valueOf)
.collect(Collectors.joining(",", "[", "]")))
.forEach(board::add);
Collections 的 toString()
已经在 AbstractCollection class 中提供了该符号。只需使用:-
Arrays.stream(BOARD)
.forEach(ints -> System.out.println(
Arrays.stream(ints).boxed().collect(Collectors.toList()))
);
或者,如果您愿意将 int[][]
更改为 Integer[][]
,您甚至可以:-
Arrays.stream(BOARD)
.forEach(ints -> System.out.println(Arrays.deepToString(ints)));
您可以嵌套 stream
并将每个级别映射在一起,首先用逗号,然后用系统行分隔符。喜欢,
return Arrays.stream(BOARD).map(a -> Arrays.stream(a)
.mapToObj(String::valueOf).collect(Collectors.joining(",", "[", "]")))
.collect(Collectors.joining(System.lineSeparator()));
我明白了
[0,0,0,0,0]
[0,0,0,0,0]
[0,0,0,0,0]
[0,0,0,0,0]
[0,0,0,0,0]