Write a method enrolledIn
that takes a
Map
from student's names (String
s) to a set of classes they are enrolled in (Set<String>) and a number
classes
that returns a sorted Set
of student's names who are enrolled in at least classes
number of classes.
Example: If the enrollments
is a Map
with the following values
{"Hunter"=["CSE 143"], "Zach"=["CSE 143", "CSE 331"], "Miri=["CSE 143", "CSE 333", "CSE 390"], "Ayaz"=["GH 101", "MATH 308"]}then
enrolledIn(enrollments, 2)
would return the set ["Ayaz", "Miri", "Zach"]
Map
with the example values above and call your method to make sure it produces the right output, testing code is provided for you if you want.
import java.util.*; public class EnrolledInTest { // YOUR METHOD GOES HERE public static void main(String[] args) { Map<String, Set<String>> enrollments = new HashMap<String, Set<String>>(); addEnrollments(enrollments, "Zach", "CSE 143"); addEnrollments(enrollments, "Zach", "CSE 331"); addEnrollments(enrollments, "Hunter", "CSE 143"); addEnrollments(enrollments, "Miri", "CSE 333"); addEnrollments(enrollments, "Miri", "CSE 390"); addEnrollments(enrollments, "Miri", "CSE 143"); addEnrollments(enrollments, "Ayaz", "GH 101"); addEnrollments(enrollments, "Ayaz", "MATH 308"); System.out.println("enrolledIn returned: " + enrolledIn(enrollments, 2)); } // Adds the given class to the set in the map for the given name. If there isn't a name, add a new entry public static void addEnrollments(Map<String, Set<String>> enrollments, String name, String className) { if (!enrollments.containsKey(name)) { enrollments.put(name, new TreeSet<String>()); } enrollments.get(name).add(className); } }Solution
Click here if you want to see the solution. Note: You can't unsee it so try to do the problem first.public static Set<String> enrolledIn(Map<String, Set<String>> enrollments, int classes) { Set<String> names = new TreeSet<String>(); // TreeSet is important for sorted for (String name : enrollments.keySet()) { if (enrollments.get(name).size() >= classes) { names.add(name); } } return names; }