Collecting occurrences in a HashMap with streams





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







1















I've got an exercise to solve. I've got a Fox class, which has got name and color fields. My exercise is to find the frequency of the foxes by color.



Thus I've created a HashMap, where the String attribute would be the fox name and the Integer would be the occurrence itself:



    Map<String, Integer> freq = new HashMap<>();


Having done that, I have been trying to write the code with streams, but I am struggling to do that. I wrote something like this:



    foxes.stream()
.map(Fox::getColor)
.forEach()
//...(continued later on);


, where foxes is a List.



My problem is basically with the syntax. I'd like to do something that if the color has no occurrences then



    freq.put(Fox::getName, 1)


else



    freq.replace(Fox::getName, freq.get(Fox::getName) + 1)


How should I put it together?










share|improve this question

























  • IMHO, the latter part of the question is confusing the initial motive. Mixing up name and color there changes the complete question intent.

    – Naman
    Jan 5 at 1:45




















1















I've got an exercise to solve. I've got a Fox class, which has got name and color fields. My exercise is to find the frequency of the foxes by color.



Thus I've created a HashMap, where the String attribute would be the fox name and the Integer would be the occurrence itself:



    Map<String, Integer> freq = new HashMap<>();


Having done that, I have been trying to write the code with streams, but I am struggling to do that. I wrote something like this:



    foxes.stream()
.map(Fox::getColor)
.forEach()
//...(continued later on);


, where foxes is a List.



My problem is basically with the syntax. I'd like to do something that if the color has no occurrences then



    freq.put(Fox::getName, 1)


else



    freq.replace(Fox::getName, freq.get(Fox::getName) + 1)


How should I put it together?










share|improve this question

























  • IMHO, the latter part of the question is confusing the initial motive. Mixing up name and color there changes the complete question intent.

    – Naman
    Jan 5 at 1:45
















1












1








1


1






I've got an exercise to solve. I've got a Fox class, which has got name and color fields. My exercise is to find the frequency of the foxes by color.



Thus I've created a HashMap, where the String attribute would be the fox name and the Integer would be the occurrence itself:



    Map<String, Integer> freq = new HashMap<>();


Having done that, I have been trying to write the code with streams, but I am struggling to do that. I wrote something like this:



    foxes.stream()
.map(Fox::getColor)
.forEach()
//...(continued later on);


, where foxes is a List.



My problem is basically with the syntax. I'd like to do something that if the color has no occurrences then



    freq.put(Fox::getName, 1)


else



    freq.replace(Fox::getName, freq.get(Fox::getName) + 1)


How should I put it together?










share|improve this question
















I've got an exercise to solve. I've got a Fox class, which has got name and color fields. My exercise is to find the frequency of the foxes by color.



Thus I've created a HashMap, where the String attribute would be the fox name and the Integer would be the occurrence itself:



    Map<String, Integer> freq = new HashMap<>();


Having done that, I have been trying to write the code with streams, but I am struggling to do that. I wrote something like this:



    foxes.stream()
.map(Fox::getColor)
.forEach()
//...(continued later on);


, where foxes is a List.



My problem is basically with the syntax. I'd like to do something that if the color has no occurrences then



    freq.put(Fox::getName, 1)


else



    freq.replace(Fox::getName, freq.get(Fox::getName) + 1)


How should I put it together?







java java-8 hashmap java-stream method-reference






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 4 at 18:49









Jacob G.

16.9k52466




16.9k52466










asked Jan 4 at 18:43









Csongi NagyCsongi Nagy

19119




19119













  • IMHO, the latter part of the question is confusing the initial motive. Mixing up name and color there changes the complete question intent.

    – Naman
    Jan 5 at 1:45





















  • IMHO, the latter part of the question is confusing the initial motive. Mixing up name and color there changes the complete question intent.

    – Naman
    Jan 5 at 1:45



















IMHO, the latter part of the question is confusing the initial motive. Mixing up name and color there changes the complete question intent.

– Naman
Jan 5 at 1:45







IMHO, the latter part of the question is confusing the initial motive. Mixing up name and color there changes the complete question intent.

– Naman
Jan 5 at 1:45














1 Answer
1






active

oldest

votes


















6














I wouldn't suggest proceeding with your approach simply because there is already a built in the collector for this i.e. groupingBy collector with counting() as downstream:



 Map<String, Long> result = foxes.stream()
.collect(Collectors.groupingBy(Fox::getName, Collectors.counting()));


This finds the frequency by "name", likewise, you can get the frequency by colour by changing the classification function.



foxes.stream()
.collect(Collectors.groupingBy(Fox::getColor, Collectors.counting()));





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%2f54044426%2fcollecting-occurrences-in-a-hashmap-with-streams%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    6














    I wouldn't suggest proceeding with your approach simply because there is already a built in the collector for this i.e. groupingBy collector with counting() as downstream:



     Map<String, Long> result = foxes.stream()
    .collect(Collectors.groupingBy(Fox::getName, Collectors.counting()));


    This finds the frequency by "name", likewise, you can get the frequency by colour by changing the classification function.



    foxes.stream()
    .collect(Collectors.groupingBy(Fox::getColor, Collectors.counting()));





    share|improve this answer






























      6














      I wouldn't suggest proceeding with your approach simply because there is already a built in the collector for this i.e. groupingBy collector with counting() as downstream:



       Map<String, Long> result = foxes.stream()
      .collect(Collectors.groupingBy(Fox::getName, Collectors.counting()));


      This finds the frequency by "name", likewise, you can get the frequency by colour by changing the classification function.



      foxes.stream()
      .collect(Collectors.groupingBy(Fox::getColor, Collectors.counting()));





      share|improve this answer




























        6












        6








        6







        I wouldn't suggest proceeding with your approach simply because there is already a built in the collector for this i.e. groupingBy collector with counting() as downstream:



         Map<String, Long> result = foxes.stream()
        .collect(Collectors.groupingBy(Fox::getName, Collectors.counting()));


        This finds the frequency by "name", likewise, you can get the frequency by colour by changing the classification function.



        foxes.stream()
        .collect(Collectors.groupingBy(Fox::getColor, Collectors.counting()));





        share|improve this answer















        I wouldn't suggest proceeding with your approach simply because there is already a built in the collector for this i.e. groupingBy collector with counting() as downstream:



         Map<String, Long> result = foxes.stream()
        .collect(Collectors.groupingBy(Fox::getName, Collectors.counting()));


        This finds the frequency by "name", likewise, you can get the frequency by colour by changing the classification function.



        foxes.stream()
        .collect(Collectors.groupingBy(Fox::getColor, Collectors.counting()));






        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Jan 4 at 18:48

























        answered Jan 4 at 18:44









        AomineAomine

        42.8k74778




        42.8k74778
































            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%2f54044426%2fcollecting-occurrences-in-a-hashmap-with-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

            generate and download xml file after input submit (php and mysql) - JPK

            Angular Downloading a file using contenturl with Basic Authentication

            Can't read property showImagePicker of undefined in react native iOS