Java Java Data Structures Exploring the Java Collection Framework Maps

Run Time Error? Stuck on this exercise. Please help me fix my codes!

Challenge Task 1 of 1 : ** In Blog.java add a new method called getCategoryCounts. It should return a Map of category-to-count calculated by looping over all the posts. **

Problem : ** Bummer: For category Entertainment, expected 1 but received null. **

My set of codes is posted. I am totally lost and confused on what I did wrong. I have attempted the challenge and have been stuck on it for over 30 minutes, please help me fix my code!

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;
import java.util.HashMap;
import java.util.Map;

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;
  }
  //My code for this exercise. I don't know what I did wrong....
   public Map<String, Integer> getCategoryCounts() {
    Map<String, Integer> categoryCounts = new HashMap<String, Integer>();
    for (BlogPost blogPost : mPosts) {
     for (String category : blogPost.getWords()){
        Integer count = categoryCounts.get(category);
        if (count == null) {
          count = 0; 

        }
        count++;
        categoryCounts.put(category, count); 
     }

    }
    return categoryCounts;
  }

}

1 Answer

Dozie Anazia
Dozie Anazia
1,227 Points

package com.example;

import java.util.List; import java.util.ArrayList; import java.util.HashSet; 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> allAuthors = new TreeSet<String>(); for (BlogPost blog : mPosts) { allAuthors.add(blog.getAuthor()); } return allAuthors;

} }

thank you