Formatting a 2d int array into a string using streams












3















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.










share|improve this question

























  • Arrays.stream(BOARD).map(Arrays::toString).map(row -> row.replace(" ", "")).collect(Collectors.joining("n"))

    – shmosel
    Nov 14 '18 at 3:39
















3















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.










share|improve this question

























  • Arrays.stream(BOARD).map(Arrays::toString).map(row -> row.replace(" ", "")).collect(Collectors.joining("n"))

    – shmosel
    Nov 14 '18 at 3:39














3












3








3








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.










share|improve this question
















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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








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



















  • 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












3 Answers
3






active

oldest

votes


















1














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]





share|improve this answer































    4














    You can alternatively do it using Arrays.streamas :



    Arrays.stream(BOARD)
    .map(aBOARD -> IntStream.of(aBOARD)
    .mapToObj(String::valueOf)
    .collect(Collectors.joining(",", "[", "]")))
    .forEach(board::add);





    share|improve this answer

































      0














      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)));





      share|improve this answer

























        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
        });


        }
        });














        draft saved

        draft discarded


















        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









        1














        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]





        share|improve this answer




























          1














          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]





          share|improve this answer


























            1












            1








            1







            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]





            share|improve this answer













            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]






            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Nov 14 '18 at 3:40









            Elliott FrischElliott Frisch

            154k1391180




            154k1391180

























                4














                You can alternatively do it using Arrays.streamas :



                Arrays.stream(BOARD)
                .map(aBOARD -> IntStream.of(aBOARD)
                .mapToObj(String::valueOf)
                .collect(Collectors.joining(",", "[", "]")))
                .forEach(board::add);





                share|improve this answer






























                  4














                  You can alternatively do it using Arrays.streamas :



                  Arrays.stream(BOARD)
                  .map(aBOARD -> IntStream.of(aBOARD)
                  .mapToObj(String::valueOf)
                  .collect(Collectors.joining(",", "[", "]")))
                  .forEach(board::add);





                  share|improve this answer




























                    4












                    4








                    4







                    You can alternatively do it using Arrays.streamas :



                    Arrays.stream(BOARD)
                    .map(aBOARD -> IntStream.of(aBOARD)
                    .mapToObj(String::valueOf)
                    .collect(Collectors.joining(",", "[", "]")))
                    .forEach(board::add);





                    share|improve this answer















                    You can alternatively do it using Arrays.streamas :



                    Arrays.stream(BOARD)
                    .map(aBOARD -> IntStream.of(aBOARD)
                    .mapToObj(String::valueOf)
                    .collect(Collectors.joining(",", "[", "]")))
                    .forEach(board::add);






                    share|improve this answer














                    share|improve this answer



                    share|improve this answer








                    edited Nov 14 '18 at 3:40









                    shmosel

                    36k43891




                    36k43891










                    answered Nov 14 '18 at 3:35









                    nullpointernullpointer

                    46.6k1199191




                    46.6k1199191























                        0














                        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)));





                        share|improve this answer






























                          0














                          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)));





                          share|improve this answer




























                            0












                            0








                            0







                            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)));





                            share|improve this answer















                            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)));






                            share|improve this answer














                            share|improve this answer



                            share|improve this answer








                            edited Nov 14 '18 at 3:43

























                            answered Nov 14 '18 at 3:37









                            KartikKartik

                            3,14931435




                            3,14931435






























                                draft saved

                                draft discarded




















































                                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.




                                draft saved


                                draft discarded














                                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





















































                                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







                                Popular posts from this blog

                                Xamarin.iOS Cant Deploy on Iphone

                                Glorious Revolution

                                Dulmage-Mendelsohn matrix decomposition in Python