Warning
This page is located in archive. Go to the latest version of this course pages.

Domácí úkol 4

Tento domácí úkol se dotkne témat: funkcionální programování, lambda funkce, map reduce, funkce vyššího řádu a promise v Javě.

Úvod

V tomto úkolu se zaměříme na české prezidentské volby. Konkrétně nás budou zajímat její výsledky a zajímavé statistiky z nich plynoucí. Vaším úkolem bude tedy vzít otevřená data Českého statistického úřadu a z těchto dat vytěžit zajímavé statistiky.

Zdroje datových sad:

Zadání

Stáhněte si šablonu pro 4. domácí úkol. Najdete zde 4 datové sady (1. kolo 2018, 2. kolo 2018, 1. kolo 2023 a 2. kolo 2023) výsledků českých prezidentských voleb. Dále zde najdete již hotové načítání datové sady, její parsování a mapování do připraveného objektového modelu a šablony tříd pro výpočet statistik. Vaším úkolem je doplnit všechny metody, které obsahují pouze komentář TODO Homework místo reálné implementace.

Abyste si mohli správnost Vašeho řešení průběžně kontrolovat, najdete zde několik unit testů. Ty jsou dělané vůči 2. kolu voleb z roku 2023. Dále můžete využit třídu Main, ve které najdete několik výpisů statistik. Ty pak můžete porovnat vůči surovým datům nebo se jen tak kochat Vašimi statistikami.

Neupravujte jiné třídy než ty, ve kterých je právě komentář TODO Homework.

Aby to nebylo zas tak jednoduché a doopravdy jste si vyzkoušeli funkcionální prvky v Javě, je v celém úkolu zakázané používat cykly a podmíněné bloky. Naopak žádoucí a povinné je použití StreamAPI, lambda funkcí, referencí metod, Optional a funkcí vyššího řádu. Dále omezte deklarace proměnných a zaměřujte se hlavně na funkce. Pomocné private metody zakázané nejsou.

Zakázané je použití cyklů (for, for-each, while, do-while) a podmíněných bloků (if, if-else, switch) v celém úkolu.
Doporučuji použít StreamAPI, Optional, lambda funkce, reference na metody a funkce vyššího řádu. Deklaraci proměnných omezte a použijte místo toho pomocnou private metodu.

Datová sada

Každá datová sada se skládá z 16 xml souborů. Prvních 14 se jmenují vždy CZ0xx.xml (kód NUTS). Tyto soubory obsahují výsledky voleb z jednotlivých krajů ČR a jejich obcí. Dále zde najdete soubor kandidati.xml, který obsahuje data o kandidátech na post prezidenta české republiky. Posledním souborem je zahranici.xml, který obsahuje výsledky hlasování na zastupitelských úřadech v zahraničí.

Datovou sadu nemusíte nijak parsovat. Toto je již implementované v šabloně úkolu za pomocí knihovny JAXB. Pokud by Vás to zajímalo, najdete to ve třídě OfflineDataLoader. Třídy datového modelu pro Váš úkol najdete v package cz.cvut.fel.omo.hw.functions.data.model. Ovšem jeden háček v parsování tu přecejen je. Data nedostanete přímo, ale zabalená jako CompletableFuture (implementace Promise patternu v Javě). To nám dovoluje například v budoucnu implementovat OnlineDataLoader, který bude asynchroně stahovat datové sady.

Nezapomínejte, že do celkových statistik musíte započítat nejenom výsledky krajů, ale i hlasování na zastupitelských úřadech v zahraničí!
V některých městech v některých datových sadách došlo k remíze mezi kandidáty. Remíza v takovém městě se považuje jako vítězství pro všechny remizující kandidáty.

Odevzdání

Vaše řešení odevzdávejte přes odevzdávací systém BRUTE. Odevzdejte pouze třídy AbroadStatisticsImpl, CandidateStatisticsImpl, ElectionStatisticsImpl, NationalStatisticsImpl, CandidateUtilsImpl. Dále můžete přibalit třídy CompletableFutureUtils a ElectionsUtilsImpl, pokud jste je doimplementovali a využili. Všechny třídy, které odevzdáváte nahrajte v ZIP archivu.

Všechny nahrávané třídy musí být v původním package. Nepřesouvejte tedy nijak třídy, nepřejmenovávejte a neměňte jejich konstruktor.
Pokud nepovinné třídy nevyužijete, ale necáte je v importech, Váš kód nepůjde zkompilovat!
Vaše řešení nebude testováno jen proti veřejně dostupným datům, ale i proti datům smyšlených voleb!
courses/b6b36omo/hw/042023/start.txt · Last modified: 2023/12/15 12:46 by zidekja2