diff --git a/Exercise.java b/Exercise.java index 3c092f9..1d8688a 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.getConsoles()); + System.out.println(queries.getAllConsolesByMaker()); + // make more queries as you wish } } diff --git a/Queries.java b/Queries.java new file mode 100644 index 0000000..ffd2926 --- /dev/null +++ b/Queries.java @@ -0,0 +1,73 @@ +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.OptionalDouble; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class Queries { + private ArrayList consoles; + + public Queries(ArrayList consoles) { + this.consoles = consoles; + } + + public List getAllCurrentConsoleNames() { + return consoles.stream() + .filter(console -> console.lifespan() == -1) + .map(console -> console.title()) + .toList(); + } + + public Map> getAllConsolesByMaker() { + return consoles.stream().collect(Collectors.groupingBy(console -> console.maker())); + } + + public List getAllConsolesSortedByLifespan() { + Comparator lifeSpanAscending = + (console1, console2) -> Integer.compare(console1.lifespan(), console2.lifespan()); + return consoles.stream().sorted(lifeSpanAscending).collect(Collectors.toList()); + } + + public OptionalDouble getAverageSoldUnitsInMillionsPerYearFromAllOutdatedConsoles() { + return consoles.stream() + .filter(console -> console.lifespan() != -1) + .mapToDouble(console -> console.soldUnitsInMillions() / console.lifespan()) + .average(); + } + + public long getNumberOfConsolesFromNintendo() { + return consoles.stream().filter(console -> console.maker().equals(Maker.NINTENDO)).count(); + } + + public List getSoldUnitsInMillionsPerYearFromAllOutdatedConsoles() { + return consoles.stream() + .filter(console -> console.lifespan() != -1) + .map( + console -> + console.title() + " (" + console.soldUnitsInMillions() / console.lifespan() + ")") + .toList(); + } + + public Map getTotalSoldUnitsInMillionsPerMaker() { + Function>, Maker> entrySetToMaker = entrySet -> entrySet.getKey(); + Function>, Double> entrySetToSoldUnits = + entrySet -> + entrySet.getValue().stream() + .mapToDouble(console -> console.soldUnitsInMillions()) + .sum(); + + return getAllConsolesByMaker().entrySet().stream() + .collect(Collectors.toMap(entrySetToMaker, entrySetToSoldUnits)); + } + + public boolean isAllConsolesWithMoreThan50MillionSoldUnits() { + return consoles.stream().allMatch(console -> console.soldUnitsInMillions() > 50); + } + + public boolean isAnyConsoleWithMoreThan150MillionSoldUnits() { + return consoles.stream().anyMatch(console -> console.soldUnitsInMillions() > 150); + } +}