Formatting a 2d int array into a string using streams
I have the following array:
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 }
};
And I want to create a String representation on it, so if I were to print it on the console, it should look like this:
[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]
I can get this done with 2 nested for
loops, but I am trying to accomplish this using streams. This is what I got so far:
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();
}
Is this something possible? I'm not particularly interested in performance (feel free to add some comments on that regard if you want), I am just trying to do this in a single chain of stream operations.
java java-stream tostring collect
add a comment |
I have the following array:
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 }
};
And I want to create a String representation on it, so if I were to print it on the console, it should look like this:
[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]
I can get this done with 2 nested for
loops, but I am trying to accomplish this using streams. This is what I got so far:
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();
}
Is this something possible? I'm not particularly interested in performance (feel free to add some comments on that regard if you want), I am just trying to do this in a single chain of stream operations.
java java-stream tostring collect
Arrays.stream(BOARD).map(Arrays::toString).map(row -> row.replace(" ", "")).collect(Collectors.joining("n"))
– shmosel
Nov 14 '18 at 3:39
add a comment |
I have the following array:
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 }
};
And I want to create a String representation on it, so if I were to print it on the console, it should look like this:
[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]
I can get this done with 2 nested for
loops, but I am trying to accomplish this using streams. This is what I got so far:
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();
}
Is this something possible? I'm not particularly interested in performance (feel free to add some comments on that regard if you want), I am just trying to do this in a single chain of stream operations.
java java-stream tostring collect
I have the following array:
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 }
};
And I want to create a String representation on it, so if I were to print it on the console, it should look like this:
[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]
I can get this done with 2 nested for
loops, but I am trying to accomplish this using streams. This is what I got so far:
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();
}
Is this something possible? I'm not particularly interested in performance (feel free to add some comments on that regard if you want), I am just trying to do this in a single chain of stream operations.
java java-stream tostring collect
java java-stream tostring collect
edited Nov 14 '18 at 3:33
shmosel
36k43891
36k43891
asked Nov 14 '18 at 3:30
alejoalejo
19219
19219
Arrays.stream(BOARD).map(Arrays::toString).map(row -> row.replace(" ", "")).collect(Collectors.joining("n"))
– shmosel
Nov 14 '18 at 3:39
add a comment |
Arrays.stream(BOARD).map(Arrays::toString).map(row -> row.replace(" ", "")).collect(Collectors.joining("n"))
– shmosel
Nov 14 '18 at 3:39
Arrays.stream(BOARD).map(Arrays::toString).map(row -> row.replace(" ", "")).collect(Collectors.joining("n"))
– shmosel
Nov 14 '18 at 3:39
Arrays.stream(BOARD).map(Arrays::toString).map(row -> row.replace(" ", "")).collect(Collectors.joining("n"))
– shmosel
Nov 14 '18 at 3:39
add a comment |
3 Answers
3
active
oldest
votes
You can nest the stream
and map each level together, first by commas and then by the system line separator. Like,
return Arrays.stream(BOARD).map(a -> Arrays.stream(a)
.mapToObj(String::valueOf).collect(Collectors.joining(",", "[", "]")))
.collect(Collectors.joining(System.lineSeparator()));
I get
[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]
add a comment |
You can alternatively do it using Arrays.stream
as :
Arrays.stream(BOARD)
.map(aBOARD -> IntStream.of(aBOARD)
.mapToObj(String::valueOf)
.collect(Collectors.joining(",", "[", "]")))
.forEach(board::add);
add a comment |
Collections' toString()
already provides that notation in the AbstractCollection class. Just use:-
Arrays.stream(BOARD)
.forEach(ints -> System.out.println(
Arrays.stream(ints).boxed().collect(Collectors.toList()))
);
Or if you are happy to change int
to Integer
, you can even do:-
Arrays.stream(BOARD)
.forEach(ints -> System.out.println(Arrays.deepToString(ints)));
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53292783%2fformatting-a-2d-int-array-into-a-string-using-streams%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can nest the stream
and map each level together, first by commas and then by the system line separator. Like,
return Arrays.stream(BOARD).map(a -> Arrays.stream(a)
.mapToObj(String::valueOf).collect(Collectors.joining(",", "[", "]")))
.collect(Collectors.joining(System.lineSeparator()));
I get
[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]
add a comment |
You can nest the stream
and map each level together, first by commas and then by the system line separator. Like,
return Arrays.stream(BOARD).map(a -> Arrays.stream(a)
.mapToObj(String::valueOf).collect(Collectors.joining(",", "[", "]")))
.collect(Collectors.joining(System.lineSeparator()));
I get
[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]
add a comment |
You can nest the stream
and map each level together, first by commas and then by the system line separator. Like,
return Arrays.stream(BOARD).map(a -> Arrays.stream(a)
.mapToObj(String::valueOf).collect(Collectors.joining(",", "[", "]")))
.collect(Collectors.joining(System.lineSeparator()));
I get
[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]
You can nest the stream
and map each level together, first by commas and then by the system line separator. Like,
return Arrays.stream(BOARD).map(a -> Arrays.stream(a)
.mapToObj(String::valueOf).collect(Collectors.joining(",", "[", "]")))
.collect(Collectors.joining(System.lineSeparator()));
I get
[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]
answered Nov 14 '18 at 3:40
Elliott FrischElliott Frisch
154k1391180
154k1391180
add a comment |
add a comment |
You can alternatively do it using Arrays.stream
as :
Arrays.stream(BOARD)
.map(aBOARD -> IntStream.of(aBOARD)
.mapToObj(String::valueOf)
.collect(Collectors.joining(",", "[", "]")))
.forEach(board::add);
add a comment |
You can alternatively do it using Arrays.stream
as :
Arrays.stream(BOARD)
.map(aBOARD -> IntStream.of(aBOARD)
.mapToObj(String::valueOf)
.collect(Collectors.joining(",", "[", "]")))
.forEach(board::add);
add a comment |
You can alternatively do it using Arrays.stream
as :
Arrays.stream(BOARD)
.map(aBOARD -> IntStream.of(aBOARD)
.mapToObj(String::valueOf)
.collect(Collectors.joining(",", "[", "]")))
.forEach(board::add);
You can alternatively do it using Arrays.stream
as :
Arrays.stream(BOARD)
.map(aBOARD -> IntStream.of(aBOARD)
.mapToObj(String::valueOf)
.collect(Collectors.joining(",", "[", "]")))
.forEach(board::add);
edited Nov 14 '18 at 3:40
shmosel
36k43891
36k43891
answered Nov 14 '18 at 3:35
nullpointernullpointer
46.6k1199191
46.6k1199191
add a comment |
add a comment |
Collections' toString()
already provides that notation in the AbstractCollection class. Just use:-
Arrays.stream(BOARD)
.forEach(ints -> System.out.println(
Arrays.stream(ints).boxed().collect(Collectors.toList()))
);
Or if you are happy to change int
to Integer
, you can even do:-
Arrays.stream(BOARD)
.forEach(ints -> System.out.println(Arrays.deepToString(ints)));
add a comment |
Collections' toString()
already provides that notation in the AbstractCollection class. Just use:-
Arrays.stream(BOARD)
.forEach(ints -> System.out.println(
Arrays.stream(ints).boxed().collect(Collectors.toList()))
);
Or if you are happy to change int
to Integer
, you can even do:-
Arrays.stream(BOARD)
.forEach(ints -> System.out.println(Arrays.deepToString(ints)));
add a comment |
Collections' toString()
already provides that notation in the AbstractCollection class. Just use:-
Arrays.stream(BOARD)
.forEach(ints -> System.out.println(
Arrays.stream(ints).boxed().collect(Collectors.toList()))
);
Or if you are happy to change int
to Integer
, you can even do:-
Arrays.stream(BOARD)
.forEach(ints -> System.out.println(Arrays.deepToString(ints)));
Collections' toString()
already provides that notation in the AbstractCollection class. Just use:-
Arrays.stream(BOARD)
.forEach(ints -> System.out.println(
Arrays.stream(ints).boxed().collect(Collectors.toList()))
);
Or if you are happy to change int
to Integer
, you can even do:-
Arrays.stream(BOARD)
.forEach(ints -> System.out.println(Arrays.deepToString(ints)));
edited Nov 14 '18 at 3:43
answered Nov 14 '18 at 3:37
KartikKartik
3,14931435
3,14931435
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53292783%2fformatting-a-2d-int-array-into-a-string-using-streams%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Arrays.stream(BOARD).map(Arrays::toString).map(row -> row.replace(" ", "")).collect(Collectors.joining("n"))
– shmosel
Nov 14 '18 at 3:39