Skip to content

Commit 5d7f9e2

Browse files
committed
Week4. dotProduct + mass refactoring
1 parent cd3c6b9 commit 5d7f9e2

File tree

5 files changed

+93
-8
lines changed

5 files changed

+93
-8
lines changed

Week4/src/EfficientRater.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ public EfficientRater(String id) {
1616
myRatings = new HashMap<>();
1717
}
1818

19-
public void addRating(String movieID, Rating rating) {
20-
myRatings.put(movieID, rating);
19+
public void addRating(String movieID, double rating) {
20+
myRatings.put(movieID, new Rating(movieID, rating));
2121
}
2222

2323
public boolean hasRating(String movieID) {
@@ -44,4 +44,8 @@ public int numRatings() {
4444
public ArrayList<String> getItemsRated() {
4545
return new ArrayList<>(myRatings.keySet());
4646
}
47+
48+
public HashMap<String, Rating> getMyRatings() {
49+
return myRatings;
50+
}
4751
}

Week4/src/FirstRatings.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,12 @@ static ArrayList<Rater> loadRaters(String fileName) {
7676
if (!idsList.contains(rater_id)) {
7777
Rater rater = new EfficientRater(rater_id);
7878
ratersList.add(rater);
79-
rater.addRating(movie_id, new Rating(movie_id, rating));
79+
rater.addRating(movie_id, rating);
8080
idsList.add(rater_id);
8181
} else {
8282
for (Rater r : ratersList) {
8383
if (r.getID().equals(rater_id)) {
84-
r.addRating(movie_id, new Rating(movie_id, rating));
84+
r.addRating(movie_id, rating);
8585
}
8686
}
8787
}

Week4/src/FourthRatings.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import java.util.ArrayList;
22
import java.util.Collections;
3+
import java.util.HashMap;
34

45
/**
56
* The week 4 class
@@ -23,7 +24,7 @@ private Double getAverageByID(String movieID, Integer minimalRaters) {
2324
return 0.0;
2425
}
2526

26-
private ArrayList<Rating> getAverageRatings(int minimalRaters) {
27+
public ArrayList<Rating> getAverageRatings(int minimalRaters) {
2728
ArrayList<Rating> list = new ArrayList<>();
2829
ArrayList<String> allMoviesIDs = MovieDatabase.filterBy(new TrueFilter());
2930
for (String movieID : allMoviesIDs) {
@@ -35,8 +36,7 @@ private ArrayList<Rating> getAverageRatings(int minimalRaters) {
3536
return list;
3637
}
3738

38-
private ArrayList<Rating> getAverageRatingsByFilter(
39-
Integer minimalRaters, Filter filterCriteria) {
39+
public ArrayList<Rating> getAverageRatingsByFilter(Integer minimalRaters, Filter filterCriteria) {
4040
ArrayList<Rating> ratingsList = new ArrayList<>();
4141
ArrayList<String> allMoviesIDs = MovieDatabase.filterBy(filterCriteria);
4242
Rating rating;
@@ -50,4 +50,16 @@ private ArrayList<Rating> getAverageRatingsByFilter(
5050
Collections.sort(ratingsList);
5151
return ratingsList;
5252
}
53+
54+
private double dotProduct(Rater meRater, Rater otherRater) {
55+
HashMap<String, Rating> myRatings = meRater.getMyRatings();
56+
double result = 0.0;
57+
for (String id : myRatings.keySet()) {
58+
double scale = meRater.getRating(id) - 5;
59+
if (otherRater.hasRating(id)) {
60+
result += scale * (otherRater.getRating(id) - 5);
61+
}
62+
}
63+
return result;
64+
}
5365
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import java.util.ArrayList;
2+
import java.util.Collections;
3+
4+
/** @author Stanislav Rakitov */
5+
public class MovieRunnerSimilarRatings {
6+
7+
/**
8+
* Print a list of movies and their average ratings sorted by averages
9+
*
10+
* @param minimalRatings int specified number of ratings
11+
*/
12+
public void printAverageRatings(int minimalRatings) {
13+
FourthRatings fourthRatings = new FourthRatings();
14+
ArrayList<Rating> ratedList = fourthRatings.getAverageRatings(minimalRatings);
15+
16+
Collections.sort(ratedList);
17+
// Print the number of raters after creating a ThirdsRating object.
18+
System.out.printf("Total movies with %d ratings is %d\n", minimalRatings, ratedList.size());
19+
20+
// Print the number of movies in the database.
21+
System.out.println("The number of movies in the database is " + MovieDatabase.size());
22+
23+
// You will call getAverageRatings with a minimal number of raters to return an ArrayList of
24+
// type Rating.
25+
26+
ArrayList<Rating> averageRatings = fourthRatings.getAverageRatings(minimalRatings);
27+
28+
// Print out how many movies with ratings are returned,
29+
// then sort them, and print out the rating and title of each movie
30+
System.out.printf(
31+
"How many movies with ratings %d are returned: %d%n",
32+
minimalRatings, averageRatings.size());
33+
34+
printRatingsList(averageRatings);
35+
}
36+
37+
public void printAverageRatingsByYearAfterAndGenre(int minimalRatings, int year, String genre) {
38+
FourthRatings fourthRatings = new FourthRatings();
39+
AllFilters filters = new AllFilters();
40+
filters.addFilter(new GenreFilter(genre));
41+
filters.addFilter(new YearAfterFilter(year));
42+
System.out.println(fourthRatings.getAverageRatingsByFilter(minimalRatings, filters).size());
43+
44+
// System.out.printf(
45+
// "Print movie(s) with at least %d rating in \"%s\" genre produced after year" + " of %d
46+
// %n",
47+
// minimalRatings, genre, year);
48+
// printRatingsList(thirdRatings.getAverageRatingsByFilter(minimalRatings, filters));
49+
}
50+
51+
private void printRatingsList(ArrayList<Rating> averageRatingList) {
52+
System.out.printf("Found %d movie(s)%n", averageRatingList.size());
53+
averageRatingList.stream()
54+
.sorted()
55+
.forEach(
56+
rating -> {
57+
String movieID = rating.getItem();
58+
System.out.printf("%-4s %s%n", rating.getValue(), MovieDatabase.getTitle(movieID));
59+
System.out.println(" Year: " + MovieDatabase.getYear(movieID));
60+
System.out.println(" Time: " + MovieDatabase.getMinutes(movieID));
61+
System.out.println(" Genre(s): " + MovieDatabase.getGenres(movieID));
62+
System.out.println(" Director(s): " + MovieDatabase.getDirector(movieID));
63+
});
64+
System.out.println("-------");
65+
}
66+
}

Week4/src/Rater.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import java.util.ArrayList;
2+
import java.util.HashMap;
23

34
public interface Rater {
45
// void addRating(String item, double rating);
5-
void addRating(String movieID, Rating rating);
6+
void addRating(String movieID, double rating);
67

78
boolean hasRating(String item);
89

@@ -13,4 +14,6 @@ public interface Rater {
1314
int numRatings();
1415

1516
ArrayList<String> getItemsRated();
17+
18+
HashMap<String, Rating> getMyRatings();
1619
}

0 commit comments

Comments
 (0)