Java Java Data Structures Exploring the Java Collection Framework Maps

Anthony Ruvinov
PRO
Anthony Ruvinov
Pro Student 6,506 Points

In Blog.java add a new method called getCategoryCounts. It should return a Map of category-to-count calculated by loopin

Im pretty much lost on what i should do here. Please help

com/example/BlogPost.java
package com.example;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;


public class BlogPost implements Comparable<BlogPost>, Serializable {
  private String mAuthor;
  private String mTitle;
  private String mBody;
  private String mCategory;
  private Date mCreationDate;

  public BlogPost(String author, String title, String body, String category, Date creationDate) {
    mAuthor = author;
    mTitle = title;
    mBody = body;
    mCategory = category;
    mCreationDate = creationDate;
  }

  public int compareTo(BlogPost other) {
    if (equals(other)) {
      return 0;
    }
    return mCreationDate.compareTo(other.mCreationDate);
  }

  public String[] getWords() {
    return mBody.split("\\s+");
  }

  public List<String> getExternalLinks() {
    List<String> links = new ArrayList<String>();
    for (String word : getWords()) {
      if (word.startsWith("http")) {
        links.add(word);
      }
    }
    return links;
  }

  public String getAuthor() {
    return mAuthor;
  }

  public String getTitle() {
    return mTitle;
  }

  public String getBody() {
    return mBody;
  }

  public String getCategory() {
    return mCategory;
  }

  public Date getCreationDate() {
    return mCreationDate;
  }
}
com/example/Blog.java
package com.example;

import java.util.List;
import java.util.Set;
import java.util.TreeSet;

public class Blog {
  List<BlogPost> mPosts;

  public Blog(List<BlogPost> posts) {
    mPosts = posts;
  }

  public List<BlogPost> getPosts() {
    return mPosts;
  }

  public Set<String> getAllAuthors() {
    Set<String> authors = new TreeSet<>();
    for (BlogPost post: mPosts) {
      authors.add(post.getAuthor());
    }
    return authors;
  }
}

1 Answer

The goal of the challenge is to return a map of the count of blog posts that contain a category.

A simple overview: the code below loops through each blog post, checks if the category is stored in the map. If the category does not have a count (meaning it hasn't been added yet) then the count is set to zero and then incremented. If the category already exists then the count is incremented. In both instances the category count pair is stored in the map. At the end of the loop the map is returned.

public Map<String, Integer> getCategoryCounts() {
    Map<String, Integer> categoryCounts = new HashMap<>();
    for (BlogPost post : mPosts) {
     String category = post.getCategory();
     Integer count = categoryCounts.get(category);
     if ( count == null) {
      count = 0; 
     }
     count++;
     categoryCounts.put(category, count);
    }
   return categoryCounts;
  }