get a comma separated string using java stream












4















I have the following code using java Stream.



I am trying the get the function to build a string of value: "a,b" in this case.
however, the output (separatedByComma in this case) is always "b".



Could somebody shed some light please?



@Test
public void testJoin() {
List<MOccS> occList = new ArrayList<> ( );
MOccS mOccS = new MOccS ();
mOccS.setOccSCd ( "1" );
mOccS.setOccSNm ( "a" );
occList.add ( mOccS );

MOccS mOccS2 = new MOccS ();
mOccS2.setOccSCd ( "2" );
mOccS2.setOccSNm ( "b" );
occList.add ( mOccS2 );


List<String> strings = new ArrayList<> ( );
strings.add ( "1" );
strings.add ( "2" );

String separatedByComma = "";
for(String word: strings) {
separatedByComma = occList.stream ()
.filter ( occ -> word.equalsIgnoreCase ( occ.getOccSCd () ) )
.map ( occ -> occ.getOccSNm () )
.collect ( Collectors.joining ( "," ) );
}

System.out.println (separatedByComma);
}


class MOccS{
String occSCd;
String occSNm;
...
getter/setter
...
}









share|improve this question





























    4















    I have the following code using java Stream.



    I am trying the get the function to build a string of value: "a,b" in this case.
    however, the output (separatedByComma in this case) is always "b".



    Could somebody shed some light please?



    @Test
    public void testJoin() {
    List<MOccS> occList = new ArrayList<> ( );
    MOccS mOccS = new MOccS ();
    mOccS.setOccSCd ( "1" );
    mOccS.setOccSNm ( "a" );
    occList.add ( mOccS );

    MOccS mOccS2 = new MOccS ();
    mOccS2.setOccSCd ( "2" );
    mOccS2.setOccSNm ( "b" );
    occList.add ( mOccS2 );


    List<String> strings = new ArrayList<> ( );
    strings.add ( "1" );
    strings.add ( "2" );

    String separatedByComma = "";
    for(String word: strings) {
    separatedByComma = occList.stream ()
    .filter ( occ -> word.equalsIgnoreCase ( occ.getOccSCd () ) )
    .map ( occ -> occ.getOccSNm () )
    .collect ( Collectors.joining ( "," ) );
    }

    System.out.println (separatedByComma);
    }


    class MOccS{
    String occSCd;
    String occSNm;
    ...
    getter/setter
    ...
    }









    share|improve this question



























      4












      4








      4


      1






      I have the following code using java Stream.



      I am trying the get the function to build a string of value: "a,b" in this case.
      however, the output (separatedByComma in this case) is always "b".



      Could somebody shed some light please?



      @Test
      public void testJoin() {
      List<MOccS> occList = new ArrayList<> ( );
      MOccS mOccS = new MOccS ();
      mOccS.setOccSCd ( "1" );
      mOccS.setOccSNm ( "a" );
      occList.add ( mOccS );

      MOccS mOccS2 = new MOccS ();
      mOccS2.setOccSCd ( "2" );
      mOccS2.setOccSNm ( "b" );
      occList.add ( mOccS2 );


      List<String> strings = new ArrayList<> ( );
      strings.add ( "1" );
      strings.add ( "2" );

      String separatedByComma = "";
      for(String word: strings) {
      separatedByComma = occList.stream ()
      .filter ( occ -> word.equalsIgnoreCase ( occ.getOccSCd () ) )
      .map ( occ -> occ.getOccSNm () )
      .collect ( Collectors.joining ( "," ) );
      }

      System.out.println (separatedByComma);
      }


      class MOccS{
      String occSCd;
      String occSNm;
      ...
      getter/setter
      ...
      }









      share|improve this question
















      I have the following code using java Stream.



      I am trying the get the function to build a string of value: "a,b" in this case.
      however, the output (separatedByComma in this case) is always "b".



      Could somebody shed some light please?



      @Test
      public void testJoin() {
      List<MOccS> occList = new ArrayList<> ( );
      MOccS mOccS = new MOccS ();
      mOccS.setOccSCd ( "1" );
      mOccS.setOccSNm ( "a" );
      occList.add ( mOccS );

      MOccS mOccS2 = new MOccS ();
      mOccS2.setOccSCd ( "2" );
      mOccS2.setOccSNm ( "b" );
      occList.add ( mOccS2 );


      List<String> strings = new ArrayList<> ( );
      strings.add ( "1" );
      strings.add ( "2" );

      String separatedByComma = "";
      for(String word: strings) {
      separatedByComma = occList.stream ()
      .filter ( occ -> word.equalsIgnoreCase ( occ.getOccSCd () ) )
      .map ( occ -> occ.getOccSNm () )
      .collect ( Collectors.joining ( "," ) );
      }

      System.out.println (separatedByComma);
      }


      class MOccS{
      String occSCd;
      String occSNm;
      ...
      getter/setter
      ...
      }






      java java-8 java-stream






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 14 '18 at 8:39









      Eran

      284k37462551




      284k37462551










      asked Nov 14 '18 at 8:20









      zaozaoerzaozaoer

      72110




      72110
























          2 Answers
          2






          active

          oldest

          votes


















          4














          Each iteration of your for loop overwrites the value of separatedByComma. The first iteration assigns the String "a" to it, and the second replaces it with "b".



          You should Stream over the elements of the strings List in order to join the Strings that match each of them into a single output String:



          String separatedByComma = 
          strings.stream()
          .flatMap(word -> occList.stream()
          .filter(occ -> word.equalsIgnoreCase (occ.getOccSCd()))
          .map (occ -> occ.getOccSNm()))
          .collect(Collectors.joining (","));


          Output:



          a,b





          share|improve this answer


























          • Thank you very much, your solution produces exactly what I needed.

            – zaozaoer
            Nov 14 '18 at 8:56



















          4














          In your loop for(String word: strings) you overwrite your separatedByComma variable.






          share|improve this answer


























          • I think you are right, could you let me know how to fix it? sorry I am new to java stream...

            – zaozaoer
            Nov 14 '18 at 8:24











          • If you want to filter occList and allow only those which getOccSCd is in list of string I can give you code sample.

            – talex
            Nov 14 '18 at 8:26











          • thanks so much for your quick answer as well. It was very helpful!

            – zaozaoer
            Nov 14 '18 at 8:56











          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%2f53295725%2fget-a-comma-separated-string-using-java-stream%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          2 Answers
          2






          active

          oldest

          votes








          2 Answers
          2






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          4














          Each iteration of your for loop overwrites the value of separatedByComma. The first iteration assigns the String "a" to it, and the second replaces it with "b".



          You should Stream over the elements of the strings List in order to join the Strings that match each of them into a single output String:



          String separatedByComma = 
          strings.stream()
          .flatMap(word -> occList.stream()
          .filter(occ -> word.equalsIgnoreCase (occ.getOccSCd()))
          .map (occ -> occ.getOccSNm()))
          .collect(Collectors.joining (","));


          Output:



          a,b





          share|improve this answer


























          • Thank you very much, your solution produces exactly what I needed.

            – zaozaoer
            Nov 14 '18 at 8:56
















          4














          Each iteration of your for loop overwrites the value of separatedByComma. The first iteration assigns the String "a" to it, and the second replaces it with "b".



          You should Stream over the elements of the strings List in order to join the Strings that match each of them into a single output String:



          String separatedByComma = 
          strings.stream()
          .flatMap(word -> occList.stream()
          .filter(occ -> word.equalsIgnoreCase (occ.getOccSCd()))
          .map (occ -> occ.getOccSNm()))
          .collect(Collectors.joining (","));


          Output:



          a,b





          share|improve this answer


























          • Thank you very much, your solution produces exactly what I needed.

            – zaozaoer
            Nov 14 '18 at 8:56














          4












          4








          4







          Each iteration of your for loop overwrites the value of separatedByComma. The first iteration assigns the String "a" to it, and the second replaces it with "b".



          You should Stream over the elements of the strings List in order to join the Strings that match each of them into a single output String:



          String separatedByComma = 
          strings.stream()
          .flatMap(word -> occList.stream()
          .filter(occ -> word.equalsIgnoreCase (occ.getOccSCd()))
          .map (occ -> occ.getOccSNm()))
          .collect(Collectors.joining (","));


          Output:



          a,b





          share|improve this answer















          Each iteration of your for loop overwrites the value of separatedByComma. The first iteration assigns the String "a" to it, and the second replaces it with "b".



          You should Stream over the elements of the strings List in order to join the Strings that match each of them into a single output String:



          String separatedByComma = 
          strings.stream()
          .flatMap(word -> occList.stream()
          .filter(occ -> word.equalsIgnoreCase (occ.getOccSCd()))
          .map (occ -> occ.getOccSNm()))
          .collect(Collectors.joining (","));


          Output:



          a,b






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 14 '18 at 8:41

























          answered Nov 14 '18 at 8:25









          EranEran

          284k37462551




          284k37462551













          • Thank you very much, your solution produces exactly what I needed.

            – zaozaoer
            Nov 14 '18 at 8:56



















          • Thank you very much, your solution produces exactly what I needed.

            – zaozaoer
            Nov 14 '18 at 8:56

















          Thank you very much, your solution produces exactly what I needed.

          – zaozaoer
          Nov 14 '18 at 8:56





          Thank you very much, your solution produces exactly what I needed.

          – zaozaoer
          Nov 14 '18 at 8:56













          4














          In your loop for(String word: strings) you overwrite your separatedByComma variable.






          share|improve this answer


























          • I think you are right, could you let me know how to fix it? sorry I am new to java stream...

            – zaozaoer
            Nov 14 '18 at 8:24











          • If you want to filter occList and allow only those which getOccSCd is in list of string I can give you code sample.

            – talex
            Nov 14 '18 at 8:26











          • thanks so much for your quick answer as well. It was very helpful!

            – zaozaoer
            Nov 14 '18 at 8:56
















          4














          In your loop for(String word: strings) you overwrite your separatedByComma variable.






          share|improve this answer


























          • I think you are right, could you let me know how to fix it? sorry I am new to java stream...

            – zaozaoer
            Nov 14 '18 at 8:24











          • If you want to filter occList and allow only those which getOccSCd is in list of string I can give you code sample.

            – talex
            Nov 14 '18 at 8:26











          • thanks so much for your quick answer as well. It was very helpful!

            – zaozaoer
            Nov 14 '18 at 8:56














          4












          4








          4







          In your loop for(String word: strings) you overwrite your separatedByComma variable.






          share|improve this answer















          In your loop for(String word: strings) you overwrite your separatedByComma variable.







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 14 '18 at 8:47









          Ole V.V.

          28.6k63352




          28.6k63352










          answered Nov 14 '18 at 8:23









          talextalex

          11k1648




          11k1648













          • I think you are right, could you let me know how to fix it? sorry I am new to java stream...

            – zaozaoer
            Nov 14 '18 at 8:24











          • If you want to filter occList and allow only those which getOccSCd is in list of string I can give you code sample.

            – talex
            Nov 14 '18 at 8:26











          • thanks so much for your quick answer as well. It was very helpful!

            – zaozaoer
            Nov 14 '18 at 8:56



















          • I think you are right, could you let me know how to fix it? sorry I am new to java stream...

            – zaozaoer
            Nov 14 '18 at 8:24











          • If you want to filter occList and allow only those which getOccSCd is in list of string I can give you code sample.

            – talex
            Nov 14 '18 at 8:26











          • thanks so much for your quick answer as well. It was very helpful!

            – zaozaoer
            Nov 14 '18 at 8:56

















          I think you are right, could you let me know how to fix it? sorry I am new to java stream...

          – zaozaoer
          Nov 14 '18 at 8:24





          I think you are right, could you let me know how to fix it? sorry I am new to java stream...

          – zaozaoer
          Nov 14 '18 at 8:24













          If you want to filter occList and allow only those which getOccSCd is in list of string I can give you code sample.

          – talex
          Nov 14 '18 at 8:26





          If you want to filter occList and allow only those which getOccSCd is in list of string I can give you code sample.

          – talex
          Nov 14 '18 at 8:26













          thanks so much for your quick answer as well. It was very helpful!

          – zaozaoer
          Nov 14 '18 at 8:56





          thanks so much for your quick answer as well. It was very helpful!

          – zaozaoer
          Nov 14 '18 at 8:56


















          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%2f53295725%2fget-a-comma-separated-string-using-java-stream%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

          Florida Star v. B. J. F.

          Danny Elfman

          Lugert, Oklahoma