Skip to content

Commit cdf69b0

Browse files
committed
Implement Solution
1 parent f78b22e commit cdf69b0

File tree

5 files changed

+84
-1
lines changed

5 files changed

+84
-1
lines changed

Exercise.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
public class Exercise {
22

33
public static void main(String[] args) {
4-
// implement exercise here
4+
Queries queries = new Queries(DataProvider.getFootballers());
5+
queries.getAllFootballersByBirthyear()
6+
.values().stream()
7+
.forEach(System.out::println);
8+
// add more queries as you wish
59
}
610
}

FootballClub.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
2+
public record FootballClub(String name, int positionInAllTimeTable, int pointsInAllTimeTable) {
3+
4+
}

Footballer.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import java.time.LocalDate;
2+
3+
public record Footballer(String name, Position position, LocalDate birthDate, int sizeInCm, FootballClub footballClub,
4+
int numberOfGames, int numberOfGoals) {
5+
6+
}

Position.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
public enum Position {
2+
GOALKEEPER,
3+
DEFENDER,
4+
MIDFIELDER,
5+
STRIKER;
6+
}

Queries.java

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import java.util.ArrayList;
2+
import java.util.Comparator;
3+
import java.util.List;
4+
import java.util.Map;
5+
import java.util.Optional;
6+
import java.util.OptionalDouble;
7+
import java.util.function.Function;
8+
import java.util.function.Predicate;
9+
import java.util.stream.Collectors;
10+
11+
public class Queries {
12+
13+
private ArrayList<Footballer> footballers;
14+
15+
public Queries(ArrayList<Footballer> footballers) {
16+
this.footballers = footballers;
17+
}
18+
19+
public int getTotalOfAllGoalsByMidfielders() {
20+
return footballers.stream()
21+
.filter(footballer -> footballer.position().equals(Position.MIDFIELDER))
22+
.mapToInt(footballer -> footballer.numberOfGoals())
23+
.sum();
24+
}
25+
26+
public Optional<Footballer> getNameOfVfLWolfsburgFootballerWithMostPlayedGames() {
27+
Predicate<Footballer> isFromWolfsburg = footballer -> footballer
28+
.footballClub().equals(new FootballClub("VfL Wolfsburg", 3, 1145));
29+
Comparator<Footballer> sortNumberOfGoalsAscending = (footballer1, footballer2) -> Integer
30+
.valueOf(footballer1.numberOfGames()).compareTo(footballer2.numberOfGames());
31+
32+
return footballers.stream()
33+
.filter(isFromWolfsburg)
34+
.max(sortNumberOfGoalsAscending);
35+
}
36+
37+
public List<FootballClub> getNameOfAllFootballClubs() {
38+
return footballers.stream()
39+
.map(footballer -> footballer.footballClub())
40+
.distinct()
41+
.toList();
42+
}
43+
44+
public boolean isFootballerWithSizeInCmLT170AndNumbreOfGoalsBT0() {
45+
return footballers.stream()
46+
.anyMatch(footballer -> footballer.sizeInCm() < 170 && footballer.numberOfGoals() > 0);
47+
}
48+
49+
public Map<Integer, List<Footballer>> getAllFootballersByBirthyear() {
50+
Function<Footballer, Integer> birthYear = footballer -> footballer.birthDate().getYear();
51+
return footballers.stream()
52+
.collect(Collectors.groupingBy(birthYear));
53+
}
54+
55+
public OptionalDouble getAverageNumberOfPointsFromAllBundesligaFootballClubs() {
56+
return footballers.stream()
57+
.map(footballer -> footballer.footballClub())
58+
.distinct()
59+
.filter(footballClub -> footballClub.positionInAllTimeTable() != -1)
60+
.mapToInt(footballClub -> footballClub.pointsInAllTimeTable())
61+
.average();
62+
}
63+
}

0 commit comments

Comments
 (0)