Skip to content

Commit 3f5ab18

Browse files
committed
Week3. DirectorsFilter
1 parent 448da71 commit 3f5ab18

File tree

3 files changed

+37
-49
lines changed

3 files changed

+37
-49
lines changed

Week3/src/DirectorsFilter.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import java.util.Arrays;
2-
31
/**
42
* A class for filter movies by directors
53
*
@@ -15,8 +13,13 @@ public DirectorsFilter(String directors) {
1513

1614
@Override
1715
public boolean satisfies(String id) {
18-
String[] movieDirectors = MovieDatabase.getDirector(id).split(",");
16+
String movieDirectors = MovieDatabase.getDirector(id);
1917
String[] filterDirectors = directors.split(",");
20-
return Arrays.asList(movieDirectors).containsAll(Arrays.asList(filterDirectors));
18+
for (String direcor : filterDirectors) {
19+
if (movieDirectors.contains(direcor)) {
20+
return true;
21+
}
22+
}
23+
return false;
2124
}
2225
}

Week3/src/MovieRunnerWithFilters.java

Lines changed: 29 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -46,16 +46,20 @@ public void printAverageRatings(int minimalRatings) {
4646
printRatingsList(averageRatings);
4747
}
4848

49-
private void printRatingsList(ArrayList<Rating> averageRatings) {
50-
averageRatings.stream()
49+
private void printRatingsList(ArrayList<Rating> averageRatingList) {
50+
System.out.printf("Found %d movies%n", averageRatingList.size());
51+
averageRatingList.stream()
5152
.sorted()
5253
.forEach(
53-
rating ->
54-
System.out.printf(
55-
"%-4s %s %s%n",
56-
rating.getValue(),
57-
MovieDatabase.getYear(rating.getItem()),
58-
MovieDatabase.getTitle(rating.getItem())));
54+
rating -> {
55+
String movieID = rating.getItem();
56+
System.out.printf("%-4s %s%n", rating.getValue(), MovieDatabase.getTitle(movieID));
57+
System.out.println(" Year: " + MovieDatabase.getYear(movieID));
58+
System.out.println(" Time: " + MovieDatabase.getMinutes(movieID));
59+
System.out.println(" Genre(s): " + MovieDatabase.getGenres(movieID));
60+
System.out.println(" Director(s): " + MovieDatabase.getDirector(movieID));
61+
});
62+
System.out.println("-------");
5963
}
6064

6165
/**
@@ -65,12 +69,8 @@ private void printRatingsList(ArrayList<Rating> averageRatings) {
6569
* @param year int Year of produce
6670
*/
6771
public void printAverageRatingsByYear(int minimalRatings, int year) {
68-
System.out.println("number of raters " + thirdRatings.getRaterSize());
69-
System.out.println("number of movies " + MovieDatabase.size());
70-
ArrayList<Rating> aveRating =
71-
thirdRatings.getAverageRatingsByFilter(minimalRatings, new YearAfterFilter(year));
72-
System.out.printf("found %d movies%n", aveRating.size());
73-
printRatingsList(aveRating);
72+
printRatingsList(
73+
thirdRatings.getAverageRatingsByFilter(minimalRatings, new YearAfterFilter(year)));
7474
}
7575

7676
/**
@@ -80,20 +80,8 @@ public void printAverageRatingsByYear(int minimalRatings, int year) {
8080
* @param genre Genre
8181
*/
8282
public void printAverageRatingsByGenre(int minimalRatings, String genre) {
83-
ArrayList<Rating> averageRatings =
84-
thirdRatings.getAverageRatingsByFilter(minimalRatings, new GenreFilter(genre));
85-
System.out.printf("found %d movies%n", averageRatings.size());
86-
averageRatings.stream()
87-
.sorted()
88-
.forEach(
89-
rating -> {
90-
String movieID = rating.getItem();
91-
System.out.printf(
92-
"%-4s %s%n %s%n",
93-
rating.getValue(),
94-
MovieDatabase.getTitle(movieID),
95-
MovieDatabase.getGenres(movieID));
96-
});
83+
printRatingsList(
84+
thirdRatings.getAverageRatingsByFilter(minimalRatings, new GenreFilter(genre)));
9785
}
9886

9987
/**
@@ -104,20 +92,19 @@ public void printAverageRatingsByGenre(int minimalRatings, String genre) {
10492
* @param maxMinutes Maximum length of movies in minutes
10593
*/
10694
public void printAverageRatingsByMinutes(int minimalRatings, int minMinutes, int maxMinutes) {
107-
ArrayList<Rating> averageRatings =
95+
printRatingsList(
10896
thirdRatings.getAverageRatingsByFilter(
109-
minimalRatings, new MinutesFilter(minMinutes, maxMinutes));
110-
System.out.printf("found %d movies%n", averageRatings.size());
111-
averageRatings.stream()
112-
.sorted()
113-
.forEach(
114-
rating -> {
115-
String movieID = rating.getItem();
116-
System.out.printf(
117-
"%-4s Time: %-3d %s%n",
118-
rating.getValue(),
119-
MovieDatabase.getMinutes(movieID),
120-
MovieDatabase.getTitle(movieID));
121-
});
97+
minimalRatings, new MinutesFilter(minMinutes, maxMinutes)));
98+
}
99+
100+
/**
101+
* Print a list of movies and their average ratings sorted by time
102+
*
103+
* @param minimalRatings Minimal number of ratings
104+
* @param directors directors of the movies
105+
*/
106+
public void printAverageRatingsByDirectors(int minimalRatings, String directors) {
107+
printRatingsList(
108+
thirdRatings.getAverageRatingsByFilter(minimalRatings, new DirectorsFilter(directors)));
122109
}
123110
}

Week3/src/Week3.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,9 @@ public static void main(String[] args) {
55
// averageRatings.forEach(System.out::println);
66
MovieRunnerWithFilters filters = new MovieRunnerWithFilters();
77
filters.printAverageRatingsByYear(1, 2000);
8-
System.out.println("---");
98
filters.printAverageRatingsByGenre(1, "Crime");
10-
System.out.println("---");
119
filters.printAverageRatingsByMinutes(1, 110, 170);
12-
System.out.println("---");
10+
filters.printAverageRatingsByDirectors(1, "Charles Chaplin,Michael Mann,Spike Jonze");
1311

1412
// MovieRunnerWithFilters filtersFull =
1513
// new MovieRunnerWithFilters("ratedmoviesfull.csv", "ratings.csv");

0 commit comments

Comments
 (0)