Use Collectors.groupingby to create a map to a set












8















I know how to create a Map<T, List<U>> , using Collectors.groupingBy:



Map<Key, List<Item>> listMap = items.stream().collect(Collectors.groupingBy(s->s.key));



How would I modify that code to create Map<Key, Set<Item>>? Or can I not do it using stream and so have to create it manually using a for loop etc.?










share|improve this question



























    8















    I know how to create a Map<T, List<U>> , using Collectors.groupingBy:



    Map<Key, List<Item>> listMap = items.stream().collect(Collectors.groupingBy(s->s.key));



    How would I modify that code to create Map<Key, Set<Item>>? Or can I not do it using stream and so have to create it manually using a for loop etc.?










    share|improve this question

























      8












      8








      8








      I know how to create a Map<T, List<U>> , using Collectors.groupingBy:



      Map<Key, List<Item>> listMap = items.stream().collect(Collectors.groupingBy(s->s.key));



      How would I modify that code to create Map<Key, Set<Item>>? Or can I not do it using stream and so have to create it manually using a for loop etc.?










      share|improve this question














      I know how to create a Map<T, List<U>> , using Collectors.groupingBy:



      Map<Key, List<Item>> listMap = items.stream().collect(Collectors.groupingBy(s->s.key));



      How would I modify that code to create Map<Key, Set<Item>>? Or can I not do it using stream and so have to create it manually using a for loop etc.?







      java set java-stream grouping






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked yesterday









      simonalexander2005simonalexander2005

      1,93842957




      1,93842957
























          3 Answers
          3






          active

          oldest

          votes


















          12














          Use Collectors.toSet() as a downstream in groupingBy:



          Map<Key, Set<Item>> map = items.stream()
          .collect(Collectors.groupingBy(s -> s.key, Collectors.toSet()));





          share|improve this answer

































            4














            You have to use a downstream collector like this:



            Map<Key, Set<Item>> listMap = items.stream()
            .collect(Collectors.groupingBy(s -> s.key, Collectors.toSet()));





            share|improve this answer

































              3














              I also like the non-stream solution sometimes:



               Map<Key, Set<Item>> yourMap = new HashMap<>();
              items.forEach(x -> yourMap.computeIfAbsent(x.getKey(), ignoreMe -> new HashSet<>()).add(x));


              If you really wanted you could exercise to do the same via compute/merge methods too






              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%2f54863316%2fuse-collectors-groupingby-to-create-a-map-to-a-set%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









                12














                Use Collectors.toSet() as a downstream in groupingBy:



                Map<Key, Set<Item>> map = items.stream()
                .collect(Collectors.groupingBy(s -> s.key, Collectors.toSet()));





                share|improve this answer






























                  12














                  Use Collectors.toSet() as a downstream in groupingBy:



                  Map<Key, Set<Item>> map = items.stream()
                  .collect(Collectors.groupingBy(s -> s.key, Collectors.toSet()));





                  share|improve this answer




























                    12












                    12








                    12







                    Use Collectors.toSet() as a downstream in groupingBy:



                    Map<Key, Set<Item>> map = items.stream()
                    .collect(Collectors.groupingBy(s -> s.key, Collectors.toSet()));





                    share|improve this answer















                    Use Collectors.toSet() as a downstream in groupingBy:



                    Map<Key, Set<Item>> map = items.stream()
                    .collect(Collectors.groupingBy(s -> s.key, Collectors.toSet()));






                    share|improve this answer














                    share|improve this answer



                    share|improve this answer








                    edited yesterday

























                    answered yesterday









                    RuslanRuslan

                    2,451822




                    2,451822

























                        4














                        You have to use a downstream collector like this:



                        Map<Key, Set<Item>> listMap = items.stream()
                        .collect(Collectors.groupingBy(s -> s.key, Collectors.toSet()));





                        share|improve this answer






























                          4














                          You have to use a downstream collector like this:



                          Map<Key, Set<Item>> listMap = items.stream()
                          .collect(Collectors.groupingBy(s -> s.key, Collectors.toSet()));





                          share|improve this answer




























                            4












                            4








                            4







                            You have to use a downstream collector like this:



                            Map<Key, Set<Item>> listMap = items.stream()
                            .collect(Collectors.groupingBy(s -> s.key, Collectors.toSet()));





                            share|improve this answer















                            You have to use a downstream collector like this:



                            Map<Key, Set<Item>> listMap = items.stream()
                            .collect(Collectors.groupingBy(s -> s.key, Collectors.toSet()));






                            share|improve this answer














                            share|improve this answer



                            share|improve this answer








                            edited yesterday









                            nullpointer

                            43.2k10101200




                            43.2k10101200










                            answered yesterday









                            Ravindra RanwalaRavindra Ranwala

                            10.4k42040




                            10.4k42040























                                3














                                I also like the non-stream solution sometimes:



                                 Map<Key, Set<Item>> yourMap = new HashMap<>();
                                items.forEach(x -> yourMap.computeIfAbsent(x.getKey(), ignoreMe -> new HashSet<>()).add(x));


                                If you really wanted you could exercise to do the same via compute/merge methods too






                                share|improve this answer






























                                  3














                                  I also like the non-stream solution sometimes:



                                   Map<Key, Set<Item>> yourMap = new HashMap<>();
                                  items.forEach(x -> yourMap.computeIfAbsent(x.getKey(), ignoreMe -> new HashSet<>()).add(x));


                                  If you really wanted you could exercise to do the same via compute/merge methods too






                                  share|improve this answer




























                                    3












                                    3








                                    3







                                    I also like the non-stream solution sometimes:



                                     Map<Key, Set<Item>> yourMap = new HashMap<>();
                                    items.forEach(x -> yourMap.computeIfAbsent(x.getKey(), ignoreMe -> new HashSet<>()).add(x));


                                    If you really wanted you could exercise to do the same via compute/merge methods too






                                    share|improve this answer















                                    I also like the non-stream solution sometimes:



                                     Map<Key, Set<Item>> yourMap = new HashMap<>();
                                    items.forEach(x -> yourMap.computeIfAbsent(x.getKey(), ignoreMe -> new HashSet<>()).add(x));


                                    If you really wanted you could exercise to do the same via compute/merge methods too







                                    share|improve this answer














                                    share|improve this answer



                                    share|improve this answer








                                    edited yesterday

























                                    answered yesterday









                                    EugeneEugene

                                    70.7k9102169




                                    70.7k9102169






























                                        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%2f54863316%2fuse-collectors-groupingby-to-create-a-map-to-a-set%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

                                        How to label and detect the document text images

                                        Vallis Paradisi

                                        Tabula Rosettana