import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; public class Movies { private static Map> myIMDB = new HashMap>(); public static void main(String[] args) { addMovie("Harry Potter and the Sorcerer's Stone", Arrays.asList("Harry Potter", "Hermione Granger", "Ron Weasley", "Albus Dumbledore"), Arrays.asList("Daniel Radcliffe", "Emma Watson", "Rupert Grint", "Richard Harris")); addMovie("Dead Men Don't Wear Plaid", Arrays.asList("Rigby Reardon", "Juliet Forrest", "Field Marshall von Kluck"), Arrays.asList("Steve Martin", "Rachel Ward", "Carl Reiner")); for(String title : listMovies()){ System.out.println(title); } System.out.println("========"); System.out.println(findActor("Harry Potter and the Sorcerer's Stone", "Ron Weasley")); System.out.println(findActor("Harry Potter and the Sorcerer's Stone", "Hairy Potter")); System.out.println(findActor("Hairy Potter", "Hairy Potter")); System.out.println("========"); showCast("Harry Potter and the Sorcerer's Stone"); System.out.println("========"); showCast("Hairy Potter"); } private static void addMovie(String title, List characters, List actors) { Map cast = makeMap(characters, actors); myIMDB .put(title, cast); } // Note: Eclipse's "Extract Method" refactoring made this specific to Map. // I later manually made it more general. private static Map makeMap(List keys, List values) { Map result = new HashMap(); for(int i = 0; i < keys.size(); i++){ result.put(keys.get(i), values.get(i)); } return result; } private static List listMovies() { return new ArrayList(myIMDB.keySet()); } private static String findActor(String title, String character) { Map cast = myIMDB.get(title); if(cast == null){ System.out.println("No such movie found"); return ""; } String actor = cast.get(character); if(actor == null){ System.out.println("No such character found"); return ""; } return actor; } private static void showCast(String title) { Map cast = myIMDB.get(title); if(cast == null){ System.out.println("No such movie found"); return; } System.out.printf("%-20s %s\n", "Character", "Actor"); for(int i = 0; i < 41; i++){ System.out.print("-"); } System.out.println(); List characters = new ArrayList(cast.keySet()); Collections.sort(characters); for(String character : characters){ System.out.printf("%-20s %s\n", character, cast.get(character)); } } }