How to get n first values from an Iterator in Java 8?











up vote
4
down vote

favorite
1












I have sorted a HashMap using Sort a Map<Key, Value> by values (Java) to that I have a LinkedHashMap, i.e. an Iterable which garantees iteration order.



Now, I'd like to retrieve a java.util.List of the first n entries of the map with a one-liner, if possible with a Java 8 Collection Stream API-technique.



I found how can i get two consecutive values from Iterator which explains that there's a possibility to do that with an array, but that's not elegant, differs from my intention to get a List (although that can be transformed, but it's an unnecessary step) and requires an extra method.










share|improve this question


























    up vote
    4
    down vote

    favorite
    1












    I have sorted a HashMap using Sort a Map<Key, Value> by values (Java) to that I have a LinkedHashMap, i.e. an Iterable which garantees iteration order.



    Now, I'd like to retrieve a java.util.List of the first n entries of the map with a one-liner, if possible with a Java 8 Collection Stream API-technique.



    I found how can i get two consecutive values from Iterator which explains that there's a possibility to do that with an array, but that's not elegant, differs from my intention to get a List (although that can be transformed, but it's an unnecessary step) and requires an extra method.










    share|improve this question
























      up vote
      4
      down vote

      favorite
      1









      up vote
      4
      down vote

      favorite
      1






      1





      I have sorted a HashMap using Sort a Map<Key, Value> by values (Java) to that I have a LinkedHashMap, i.e. an Iterable which garantees iteration order.



      Now, I'd like to retrieve a java.util.List of the first n entries of the map with a one-liner, if possible with a Java 8 Collection Stream API-technique.



      I found how can i get two consecutive values from Iterator which explains that there's a possibility to do that with an array, but that's not elegant, differs from my intention to get a List (although that can be transformed, but it's an unnecessary step) and requires an extra method.










      share|improve this question













      I have sorted a HashMap using Sort a Map<Key, Value> by values (Java) to that I have a LinkedHashMap, i.e. an Iterable which garantees iteration order.



      Now, I'd like to retrieve a java.util.List of the first n entries of the map with a one-liner, if possible with a Java 8 Collection Stream API-technique.



      I found how can i get two consecutive values from Iterator which explains that there's a possibility to do that with an array, but that's not elegant, differs from my intention to get a List (although that can be transformed, but it's an unnecessary step) and requires an extra method.







      java java-8 java-stream






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked May 23 '17 at 13:03









      Karl Richter

      2,380112957




      2,380112957
























          2 Answers
          2






          active

          oldest

          votes

















          up vote
          11
          down vote



          accepted










          Stream the entrySet and limit the Stream to the first n elements:



          List<Map.Entry<Key,Value>> firstN = 
          map.entrySet().stream().limit(n).collect(Collectors.toList());





          share|improve this answer




























            up vote
            1
            down vote













            Writing more concise code with StreamEx:



            List<Map.Entry<Key,Value>> firstN = EntryStream.of(map).limit(n).toList();





            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',
              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%2f44135683%2fhow-to-get-n-first-values-from-an-iterator-in-java-8%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








              up vote
              11
              down vote



              accepted










              Stream the entrySet and limit the Stream to the first n elements:



              List<Map.Entry<Key,Value>> firstN = 
              map.entrySet().stream().limit(n).collect(Collectors.toList());





              share|improve this answer

























                up vote
                11
                down vote



                accepted










                Stream the entrySet and limit the Stream to the first n elements:



                List<Map.Entry<Key,Value>> firstN = 
                map.entrySet().stream().limit(n).collect(Collectors.toList());





                share|improve this answer























                  up vote
                  11
                  down vote



                  accepted







                  up vote
                  11
                  down vote



                  accepted






                  Stream the entrySet and limit the Stream to the first n elements:



                  List<Map.Entry<Key,Value>> firstN = 
                  map.entrySet().stream().limit(n).collect(Collectors.toList());





                  share|improve this answer












                  Stream the entrySet and limit the Stream to the first n elements:



                  List<Map.Entry<Key,Value>> firstN = 
                  map.entrySet().stream().limit(n).collect(Collectors.toList());






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered May 23 '17 at 13:05









                  Eran

                  272k35431514




                  272k35431514
























                      up vote
                      1
                      down vote













                      Writing more concise code with StreamEx:



                      List<Map.Entry<Key,Value>> firstN = EntryStream.of(map).limit(n).toList();





                      share|improve this answer

























                        up vote
                        1
                        down vote













                        Writing more concise code with StreamEx:



                        List<Map.Entry<Key,Value>> firstN = EntryStream.of(map).limit(n).toList();





                        share|improve this answer























                          up vote
                          1
                          down vote










                          up vote
                          1
                          down vote









                          Writing more concise code with StreamEx:



                          List<Map.Entry<Key,Value>> firstN = EntryStream.of(map).limit(n).toList();





                          share|improve this answer












                          Writing more concise code with StreamEx:



                          List<Map.Entry<Key,Value>> firstN = EntryStream.of(map).limit(n).toList();






                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered May 24 '17 at 18:37









                          user_3380739

                          83868




                          83868






























                               

                              draft saved


                              draft discarded



















































                               


                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f44135683%2fhow-to-get-n-first-values-from-an-iterator-in-java-8%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

                              Can a sorcerer learn a 5th-level spell early by creating spell slots using the Font of Magic feature?

                              Does disintegrating a polymorphed enemy still kill it after the 2018 errata?

                              A Topological Invariant for $pi_3(U(n))$