Using stream api to set strings all lowercase but capitalize first letter











up vote
6
down vote

favorite












I have strings in a list and through only using the stream api I was settings all strings to lowercase, sorting them from smallest string to largest and printing them. The issue I'm having is capitalizing the first letter of the string. Is that something I do through .stream().map()?



Main:



public static void main(String args) {

List<String> list = Arrays.asList("SOmE", "StriNgs", "fRom", "mE", "To", "yOU");
list.stream().map(n -> n.toLowerCase())
.sorted((a, b) -> a.length() - b.length())
.forEach(n -> System.out.println(n));;

}


Output:



me
to
you
some
from
strings


Desired output:



Me
To
You
Some
From
Strings









share|improve this question




























    up vote
    6
    down vote

    favorite












    I have strings in a list and through only using the stream api I was settings all strings to lowercase, sorting them from smallest string to largest and printing them. The issue I'm having is capitalizing the first letter of the string. Is that something I do through .stream().map()?



    Main:



    public static void main(String args) {

    List<String> list = Arrays.asList("SOmE", "StriNgs", "fRom", "mE", "To", "yOU");
    list.stream().map(n -> n.toLowerCase())
    .sorted((a, b) -> a.length() - b.length())
    .forEach(n -> System.out.println(n));;

    }


    Output:



    me
    to
    you
    some
    from
    strings


    Desired output:



    Me
    To
    You
    Some
    From
    Strings









    share|improve this question


























      up vote
      6
      down vote

      favorite









      up vote
      6
      down vote

      favorite











      I have strings in a list and through only using the stream api I was settings all strings to lowercase, sorting them from smallest string to largest and printing them. The issue I'm having is capitalizing the first letter of the string. Is that something I do through .stream().map()?



      Main:



      public static void main(String args) {

      List<String> list = Arrays.asList("SOmE", "StriNgs", "fRom", "mE", "To", "yOU");
      list.stream().map(n -> n.toLowerCase())
      .sorted((a, b) -> a.length() - b.length())
      .forEach(n -> System.out.println(n));;

      }


      Output:



      me
      to
      you
      some
      from
      strings


      Desired output:



      Me
      To
      You
      Some
      From
      Strings









      share|improve this question















      I have strings in a list and through only using the stream api I was settings all strings to lowercase, sorting them from smallest string to largest and printing them. The issue I'm having is capitalizing the first letter of the string. Is that something I do through .stream().map()?



      Main:



      public static void main(String args) {

      List<String> list = Arrays.asList("SOmE", "StriNgs", "fRom", "mE", "To", "yOU");
      list.stream().map(n -> n.toLowerCase())
      .sorted((a, b) -> a.length() - b.length())
      .forEach(n -> System.out.println(n));;

      }


      Output:



      me
      to
      you
      some
      from
      strings


      Desired output:



      Me
      To
      You
      Some
      From
      Strings






      java java-8 mapping java-stream capitalization






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited 6 hours ago









      Andrew Tobilko

      24.1k84080




      24.1k84080










      asked 6 hours ago









      Devin

      1017




      1017
























          3 Answers
          3






          active

          oldest

          votes

















          up vote
          7
          down vote



          accepted










          Something like this should suffice:



           list.stream()
          .map(n -> n.toLowerCase())
          .sorted(Comparator.comparingInt(String::length))
          .map(s -> Character.toUpperCase(s.charAt(0)) + s.substring(1))
          .forEach(n -> System.out.println(n));



          1. note that I've changed the comparator, which is essentially the idiomatic approach to do it.

          2. I've added a map operation after sorting to uppercase the first letter.






          share|improve this answer





















          • Yes that works, thank you! I was unaware I could use Map multiple times for the same stream.
            – Devin
            6 hours ago






          • 1




            @Devin you can chain as many intermediate operations as you like.
            – Aomine
            6 hours ago


















          up vote
          9
          down vote













          list.stream()
          .map(s -> s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase())
          .sorted(Comparator.comparingInt(String::length))
          .forEach(System.out::println);


          For readability, the line performing capitalisation should be moved into a method,



          public class StringUtils {
          public static String capitalise(String s) {
          return s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase();
          }
          }


          so you can refer to it via an eloquent method reference:



          list.stream()
          .map(StringUtils::capitalise)
          .sorted(Comparator.comparingInt(String::length))
          .forEach(System.out::println);





          share|improve this answer






























            up vote
            2
            down vote













            You can use WordUtils::capitalizeFully from apache commons-lang for this.



             list.stream()
            .sorted(Comparator.comparingInt(String::length))
            .map(WordUtils::capitalizeFully)
            .forEach(System.out::println);





            share|improve this answer



















            • 1




              OP wants to capitalise only the first letter. Besides, you didn't mention where WordUtils comes from...
              – Andrew Tobilko
              5 hours ago






            • 1




              @AndrewTobilko WordUtils::capitalizeFully does just that. I have mentioned where WordUtils comes from now.
              – fastcodejava
              5 hours ago











            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',
            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%2f53733777%2fusing-stream-api-to-set-strings-all-lowercase-but-capitalize-first-letter%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








            up vote
            7
            down vote



            accepted










            Something like this should suffice:



             list.stream()
            .map(n -> n.toLowerCase())
            .sorted(Comparator.comparingInt(String::length))
            .map(s -> Character.toUpperCase(s.charAt(0)) + s.substring(1))
            .forEach(n -> System.out.println(n));



            1. note that I've changed the comparator, which is essentially the idiomatic approach to do it.

            2. I've added a map operation after sorting to uppercase the first letter.






            share|improve this answer





















            • Yes that works, thank you! I was unaware I could use Map multiple times for the same stream.
              – Devin
              6 hours ago






            • 1




              @Devin you can chain as many intermediate operations as you like.
              – Aomine
              6 hours ago















            up vote
            7
            down vote



            accepted










            Something like this should suffice:



             list.stream()
            .map(n -> n.toLowerCase())
            .sorted(Comparator.comparingInt(String::length))
            .map(s -> Character.toUpperCase(s.charAt(0)) + s.substring(1))
            .forEach(n -> System.out.println(n));



            1. note that I've changed the comparator, which is essentially the idiomatic approach to do it.

            2. I've added a map operation after sorting to uppercase the first letter.






            share|improve this answer





















            • Yes that works, thank you! I was unaware I could use Map multiple times for the same stream.
              – Devin
              6 hours ago






            • 1




              @Devin you can chain as many intermediate operations as you like.
              – Aomine
              6 hours ago













            up vote
            7
            down vote



            accepted







            up vote
            7
            down vote



            accepted






            Something like this should suffice:



             list.stream()
            .map(n -> n.toLowerCase())
            .sorted(Comparator.comparingInt(String::length))
            .map(s -> Character.toUpperCase(s.charAt(0)) + s.substring(1))
            .forEach(n -> System.out.println(n));



            1. note that I've changed the comparator, which is essentially the idiomatic approach to do it.

            2. I've added a map operation after sorting to uppercase the first letter.






            share|improve this answer












            Something like this should suffice:



             list.stream()
            .map(n -> n.toLowerCase())
            .sorted(Comparator.comparingInt(String::length))
            .map(s -> Character.toUpperCase(s.charAt(0)) + s.substring(1))
            .forEach(n -> System.out.println(n));



            1. note that I've changed the comparator, which is essentially the idiomatic approach to do it.

            2. I've added a map operation after sorting to uppercase the first letter.







            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered 6 hours ago









            Aomine

            35.7k62859




            35.7k62859












            • Yes that works, thank you! I was unaware I could use Map multiple times for the same stream.
              – Devin
              6 hours ago






            • 1




              @Devin you can chain as many intermediate operations as you like.
              – Aomine
              6 hours ago


















            • Yes that works, thank you! I was unaware I could use Map multiple times for the same stream.
              – Devin
              6 hours ago






            • 1




              @Devin you can chain as many intermediate operations as you like.
              – Aomine
              6 hours ago
















            Yes that works, thank you! I was unaware I could use Map multiple times for the same stream.
            – Devin
            6 hours ago




            Yes that works, thank you! I was unaware I could use Map multiple times for the same stream.
            – Devin
            6 hours ago




            1




            1




            @Devin you can chain as many intermediate operations as you like.
            – Aomine
            6 hours ago




            @Devin you can chain as many intermediate operations as you like.
            – Aomine
            6 hours ago












            up vote
            9
            down vote













            list.stream()
            .map(s -> s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase())
            .sorted(Comparator.comparingInt(String::length))
            .forEach(System.out::println);


            For readability, the line performing capitalisation should be moved into a method,



            public class StringUtils {
            public static String capitalise(String s) {
            return s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase();
            }
            }


            so you can refer to it via an eloquent method reference:



            list.stream()
            .map(StringUtils::capitalise)
            .sorted(Comparator.comparingInt(String::length))
            .forEach(System.out::println);





            share|improve this answer



























              up vote
              9
              down vote













              list.stream()
              .map(s -> s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase())
              .sorted(Comparator.comparingInt(String::length))
              .forEach(System.out::println);


              For readability, the line performing capitalisation should be moved into a method,



              public class StringUtils {
              public static String capitalise(String s) {
              return s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase();
              }
              }


              so you can refer to it via an eloquent method reference:



              list.stream()
              .map(StringUtils::capitalise)
              .sorted(Comparator.comparingInt(String::length))
              .forEach(System.out::println);





              share|improve this answer

























                up vote
                9
                down vote










                up vote
                9
                down vote









                list.stream()
                .map(s -> s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase())
                .sorted(Comparator.comparingInt(String::length))
                .forEach(System.out::println);


                For readability, the line performing capitalisation should be moved into a method,



                public class StringUtils {
                public static String capitalise(String s) {
                return s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase();
                }
                }


                so you can refer to it via an eloquent method reference:



                list.stream()
                .map(StringUtils::capitalise)
                .sorted(Comparator.comparingInt(String::length))
                .forEach(System.out::println);





                share|improve this answer














                list.stream()
                .map(s -> s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase())
                .sorted(Comparator.comparingInt(String::length))
                .forEach(System.out::println);


                For readability, the line performing capitalisation should be moved into a method,



                public class StringUtils {
                public static String capitalise(String s) {
                return s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase();
                }
                }


                so you can refer to it via an eloquent method reference:



                list.stream()
                .map(StringUtils::capitalise)
                .sorted(Comparator.comparingInt(String::length))
                .forEach(System.out::println);






                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited 5 hours ago

























                answered 6 hours ago









                Andrew Tobilko

                24.1k84080




                24.1k84080






















                    up vote
                    2
                    down vote













                    You can use WordUtils::capitalizeFully from apache commons-lang for this.



                     list.stream()
                    .sorted(Comparator.comparingInt(String::length))
                    .map(WordUtils::capitalizeFully)
                    .forEach(System.out::println);





                    share|improve this answer



















                    • 1




                      OP wants to capitalise only the first letter. Besides, you didn't mention where WordUtils comes from...
                      – Andrew Tobilko
                      5 hours ago






                    • 1




                      @AndrewTobilko WordUtils::capitalizeFully does just that. I have mentioned where WordUtils comes from now.
                      – fastcodejava
                      5 hours ago















                    up vote
                    2
                    down vote













                    You can use WordUtils::capitalizeFully from apache commons-lang for this.



                     list.stream()
                    .sorted(Comparator.comparingInt(String::length))
                    .map(WordUtils::capitalizeFully)
                    .forEach(System.out::println);





                    share|improve this answer



















                    • 1




                      OP wants to capitalise only the first letter. Besides, you didn't mention where WordUtils comes from...
                      – Andrew Tobilko
                      5 hours ago






                    • 1




                      @AndrewTobilko WordUtils::capitalizeFully does just that. I have mentioned where WordUtils comes from now.
                      – fastcodejava
                      5 hours ago













                    up vote
                    2
                    down vote










                    up vote
                    2
                    down vote









                    You can use WordUtils::capitalizeFully from apache commons-lang for this.



                     list.stream()
                    .sorted(Comparator.comparingInt(String::length))
                    .map(WordUtils::capitalizeFully)
                    .forEach(System.out::println);





                    share|improve this answer














                    You can use WordUtils::capitalizeFully from apache commons-lang for this.



                     list.stream()
                    .sorted(Comparator.comparingInt(String::length))
                    .map(WordUtils::capitalizeFully)
                    .forEach(System.out::println);






                    share|improve this answer














                    share|improve this answer



                    share|improve this answer








                    edited 5 hours ago

























                    answered 5 hours ago









                    fastcodejava

                    23.7k19109160




                    23.7k19109160








                    • 1




                      OP wants to capitalise only the first letter. Besides, you didn't mention where WordUtils comes from...
                      – Andrew Tobilko
                      5 hours ago






                    • 1




                      @AndrewTobilko WordUtils::capitalizeFully does just that. I have mentioned where WordUtils comes from now.
                      – fastcodejava
                      5 hours ago














                    • 1




                      OP wants to capitalise only the first letter. Besides, you didn't mention where WordUtils comes from...
                      – Andrew Tobilko
                      5 hours ago






                    • 1




                      @AndrewTobilko WordUtils::capitalizeFully does just that. I have mentioned where WordUtils comes from now.
                      – fastcodejava
                      5 hours ago








                    1




                    1




                    OP wants to capitalise only the first letter. Besides, you didn't mention where WordUtils comes from...
                    – Andrew Tobilko
                    5 hours ago




                    OP wants to capitalise only the first letter. Besides, you didn't mention where WordUtils comes from...
                    – Andrew Tobilko
                    5 hours ago




                    1




                    1




                    @AndrewTobilko WordUtils::capitalizeFully does just that. I have mentioned where WordUtils comes from now.
                    – fastcodejava
                    5 hours ago




                    @AndrewTobilko WordUtils::capitalizeFully does just that. I have mentioned where WordUtils comes from now.
                    – fastcodejava
                    5 hours ago


















                    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.





                    Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                    Please pay close attention to the following guidance:


                    • 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%2f53733777%2fusing-stream-api-to-set-strings-all-lowercase-but-capitalize-first-letter%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

                    Costa Masnaga

                    Fotorealismo

                    Sidney Franklin