我有以下数组:
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 }
};
我想在其上创建一个String表示形式,因此,如果要在控制台上打印它,它应该看起来像这样:
[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();
}
这可能吗?我对性能不是特别感兴趣(如果需要,可以在此方面添加一些评论),我只是想在单个流操作链中做到这一点。
答案 0 :(得分:3)
您也可以使用Arrays.stream
,如下所示:
Arrays.stream(BOARD)
.map(aBOARD -> IntStream.of(aBOARD)
.mapToObj(String::valueOf)
.collect(Collectors.joining(",", "[", "]")))
.forEach(board::add);
答案 1 :(得分:1)
您可以嵌套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]
答案 2 :(得分:0)
Collection的toString()
已在AbstractCollection类中提供了该表示法。只需使用:-
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)));