diff --git a/Exercise.java b/Exercise.java index 3c092f9..2e73171 100644 --- a/Exercise.java +++ b/Exercise.java @@ -1,6 +1,8 @@ public class Exercise { public static void main(String[] args) { - // implement exercise here + Queries queries = new Queries(DataProvider.getFootballers()); + queries.getAllFootballersByBirthyear().values().stream().forEach(System.out::println); + // add more queries as you wish } } diff --git a/FootballClub.java b/FootballClub.java new file mode 100644 index 0000000..d672df3 --- /dev/null +++ b/FootballClub.java @@ -0,0 +1 @@ +public record FootballClub(String name, int positionInAllTimeTable, int pointsInAllTimeTable) {} diff --git a/Footballer.java b/Footballer.java new file mode 100644 index 0000000..f728485 --- /dev/null +++ b/Footballer.java @@ -0,0 +1,10 @@ +import java.time.LocalDate; + +public record Footballer( + String name, + Position position, + LocalDate birthDate, + int sizeInCm, + FootballClub footballClub, + int numberOfGames, + int numberOfGoals) {} diff --git a/Position.java b/Position.java new file mode 100644 index 0000000..725db90 --- /dev/null +++ b/Position.java @@ -0,0 +1,6 @@ +public enum Position { + GOALKEEPER, + DEFENDER, + MIDFIELDER, + STRIKER; +} diff --git a/Queries.java b/Queries.java new file mode 100644 index 0000000..8ccce42 --- /dev/null +++ b/Queries.java @@ -0,0 +1,61 @@ +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.OptionalDouble; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +public class Queries { + + private ArrayList footballers; + + public Queries(ArrayList footballers) { + this.footballers = footballers; + } + + public int getTotalOfAllGoalsByMidfielders() { + return footballers.stream() + .filter(footballer -> footballer.position().equals(Position.MIDFIELDER)) + .mapToInt(footballer -> footballer.numberOfGoals()) + .sum(); + } + + public Optional getNameOfVfLWolfsburgFootballerWithMostPlayedGames() { + Predicate isFromWolfsburg = + footballer -> footballer.footballClub().equals(new FootballClub("VfL Wolfsburg", 3, 1145)); + Comparator sortNumberOfGoalsAscending = + (footballer1, footballer2) -> + Integer.valueOf(footballer1.numberOfGames()).compareTo(footballer2.numberOfGames()); + + return footballers.stream() + .filter(isFromWolfsburg) + .max(sortNumberOfGoalsAscending) + .map(footballer -> footballer.name()); + } + + public List getNameOfAllFootballClubs() { + return footballers.stream().map(footballer -> footballer.footballClub()).distinct().toList(); + } + + public boolean isFootballerWithSizeInCmLT170AndNumbreOfGoalsBT0() { + return footballers.stream() + .anyMatch(footballer -> footballer.sizeInCm() < 170 && footballer.numberOfGoals() > 0); + } + + public Map> getAllFootballersByBirthyear() { + Function birthYear = footballer -> footballer.birthDate().getYear(); + return footballers.stream().collect(Collectors.groupingBy(birthYear)); + } + + public OptionalDouble getAverageNumberOfPointsFromAllBundesligaFootballClubs() { + return footballers.stream() + .map(footballer -> footballer.footballClub()) + .distinct() + .filter(footballClub -> footballClub.positionInAllTimeTable() != -1) + .mapToInt(footballClub -> footballClub.pointsInAllTimeTable()) + .average(); + } +}